rustc: use a TypedArena to allocate types in the type context.
rustc: fix fallout from the addition of a 'tcx lifetime on tcx.
rustc: fix fallout from the addition of a 'tcx lifetime on trans::Block.
rustdoc: fix fallout from the addition of a 'tcx lifetime on tcx.
auto merge of #12809 : eddyb/rust/ty-arena, r=cmr

This was inspired by seeing a LLVM flatline of **~600MB** when running rustc with jemalloc (each type's `t_box_` is allocated on the heap, creating a lot of fragmentation, which jemalloc can deal with, unlike glibc).