Remove (more) dependencies on TypeContents

Currently we use `TypeContents` to determine whether types are sized. This is not good because `TypeContents` cannot take the parameter environment into account and thus cannot handle where clauses.

This patch removes most of those uses and instead uses the trait resolution infrastructure. This means that we can handle context-dependent where clauses. `TypeContents` is still used in trans (possibly this should be removed in a later refactor, actually).

r? @nick29581