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
Add FIXMEs relating to caching of projection results
Patch long line.
Add a FIXME relating to these type-testing traits
Adjust tests for inferenceGet more conservative about inference for now. Seems better to err on the side of being more correct rather than less. Fix a bug in typing index expressions that was exposed as a result, and add one type annotation that is not required. Delete some random tests that were relying on old behavior and don't seem to add anything anymore.