Implement debug printing for tcx interner sty's.
Store Substs in an arena in the tcx.

This current inflates memory use more than 3 times.
Intern substs before storing them in the tcx.

This cuts memory use dramatically from the previous commit, and reduces
use overall. E.g. the memory usage of `rustc -O librustc/lib.rs` seems
to drop 100MB from 1.98GB to 1.88GB (on one run anyway).
Switch Region information from uint to u32.

This reduces memory use for building librustc with -O from 1.88 to 1.76
GB.
Intern BareFnTys to make sty slightly smaller.

This cuts the ty_bare_fn variant to 48 bytes rather than 56. There
doesn't seem to be a noticable memory usage decrease from this.
Collect tcx arenas into a single struct.

This allows expanding how many arenas exist without users having to
care, since they are all created with CtxtArena::new().
Intern Region in tcx.

This makes sty only 32 bytes on machines with 64-bit pointers.
Print info from the barefn and region interners in the tcx.
Slash the ast::Stmt type from 104 to 24 bytes.

(on platforms with 64-bit pointers.)

The StmtMac variant is rather large and also fairly rare, so let's
optimise the common case.
Fix rebase artifacts.
Add the -Z print-enum-sizes flag for displaying enum info.

This replaces required the RUST_LOG=... invocation to make it much more
user friendly.
Rebase fixes.

I've totally mangled the history with these rebases; sorry, future programmer!
Update rustc_driver tests.
More rebase fixes.
auto merge of #19549 : huonw/rust/middle-ty-2, r=nikomatsakis

This takes building `librustc/lib.rs` from using 696 MB to 588 (`rustc --no-trans`), and 1.99 GB to 1.87 (`rustc -O`). It also reduces `sty` down to 32 bytes on platforms with 64-bit pointers, at the expense of some more side-tables in `ctxt`. I'm sure there's more gains to be had from reducing the size of the side tables (e.g. by making the actual things they're storing smaller).

r? @nikomatsakis
Fix fallout from change, adding explicit `Sized` annotations where necessary.
Fix fallout in tests.
Do not automatically make `Self` `Sized` in traits.
Refactor object-safety into its own (cached) module so that we can check it more easily.
Move the `upcast` routine into traits and use it for method selection