Move the TypeContents-based "Sized" queries into trans, where the full
types are always known and hence the ParameterEnvironment is not
necessary. For other `Sized` queries, use the trait infrastructure
just like `Copy`.
Rewrite the intrinsicck to take the parameter environment into account. Also fixes #20116.
Rename `trait_ref` field to `predicate`, since `trait_ref` is really
overly general, and the value is always *some* sort of predicate.
Rename `Polytype` to `TypeScheme` to differentiate type schemes (early bound) from higher-ranked things (late-bound), which also use the `Poly` prefix.
Move the scalar types out of static data so that we can put `Rc` into sty.
Implement associated type projection and normalization.
Convert to use `Rc<TraitRef>` in object types (finally!).
Integrate projection bounds to `ExistentialBounds` but do not use them for anything.
Allow object safe traits to access associated types.
Teach `project` to project associated types out of object types.
Make projected types select out of the trait bounds.
Update error messages in various compile-fail tests
Remove the def-id from type parameters. Having this def-id was bad for several reasons:

1. Produced more unique types than is necessary. This increases memory consumption.
2. Linking the type parameter to its definition *seems* like a good idea, but it
   encourages reliance on the bounds listing.
3. It made pretty-printing harder and in particular was causing bad error messages
   when errors occurred before the `TypeParameterDef` entries were fully stored.
Don't normalize associated types when in region binders, wait until we instantiate
them. Also fix some assertions and handling of builtin bounds.
Patch tests and create new tests related to projection from a HRTB.
Add a FIXME relating to using `ast::Name`
Add a FIXME relating to Copy<T> not being checked
File a FIXME relating to using where clauses, not bounds
Add a FIXME to patch up rustdoc
Add a FIXME relating to regions and projection types