rustc: put ty_trait behind some indirection.

This reduces ty::sty from 160 bytes to just 112, and some measurements
eddyb made suggest that the ty_trait variant occurs very
rarely (e.g. ~1% of all sty instances) hence this will result in a large
memory saving, and the cost of the indirection is unlikely to be an
issue.
rustc: put ty_closure behind some indirection.

This reduces the size of sty from 112 to 96; like with the ty_trait
variant, this variant of sty occurs rarely (~1%) so the benefits are
large and the costs small.
Remove std::cast::transmute_immut_unsafe

It can be done in safe code using `as *T`.
rustc: Prevent false positives in crate loading

Previously, any library of the pattern `lib<name>-<hash>-<version>.so` was
>considered a candidate (rightly so) for loading a crate. Sets are generated for
each unique `<hash>`, and then from these sets a candidate is selected. If a set
contained more than one element, then it immediately generated an error saying
that multiple copies of the same dylib were found.

This is incorrect because each candidate needs to be validated to actually
contain a rust library (valid metadata). This commit alters the logic to filter
each set of candidates for a hash to only libraries which are actually rust
libraries. This means that if multiple false positives are found with the right
name pattern, they're all ignored.

Closes #13010
Fix spans for enum-struct match arms

Correct spans for fields in enum struct arms where the field and variable are unified
auto merge of #13013 : huonw/rust/tytrait, r=cmr

These variants occur rarely but inflate the whole enum for the other variants, leaving a lot of wasted space. In total this reduces `ty::sty` from 160 bytes to 96 (on a 64-bit platform).

After this, `ty_struct` and `ty_enum` are the largest variants, with the 80-byte `substs` being the major contributor.
std: io: flush stdout on stdin read from tty
rename std::vec -> std::slice

Closes #12702
auto merge of #12772 : thestinger/rust/slice, r=alexcrichton

Closes #12702
auto merge of #12854 : nick29581/rust/parse-enum-struct, r=alexcrichton

...where the field and variable are unified
rename std::vec_ng -> std::vec

Closes #12771
Add a Share kind

Fixes #11781
Make `Rc`, `Cell` and `RefCell` NoShare
Replace Freeze bounds with Share bounds
Relax interner's Share bound

The interner uses `RefCell` internally which opted out from Share.
Add Unsafe<T> type
Make Cell and RefCell use Unsafe<T>
Let ArcData use Unsafe<T>
Gather loans for static items

We currently gather loans for static items that are defined within
functions. This change enables loan gathering on static items declared
globally.
Forbid borrow of static items with unsafe interior