Fix checking of (list ...) w/ union expected type

This PR fixes a regression in type-checking the `(list ...)` form.

I'm making this a pull request mainly because I've changed the typechecking API to include two new functions `tc-expr/check?` and `tc-expr/check/t?` that return `#f` on a typecheck failure instead of a type or tc-result.

@shekari does the fix look reasonable to you? I think you are the last person to have touched this tc-app code.
Then it should have a stronger contract, probably `(or/c Type/c #f)`.