This pushes almost all uses of check below into tc-expr and tc-expr/check. This means that the optimizer sees more precise types and can make more optimizations.