Remove TraitStore from ty_trait

Use ty_rptr/ty_uniq(ty_trait) rather than TraitStore to represent trait types.
Also addresses (but doesn't close) #12470.
Part of the work towards DST (#12938).
I've been thinking about this lately, as we briefly discussed on the phone. On the one hand, there are rules against assigning lvalues of unsigned type, so in fact an `&mut U`(where `U` is unsized) is more limited than an `&mut S` (where `S` is sized). In particular, you cannot do `*x = foo as Trait` or something like that. For this reason, I believe that e.g. `&mut (Trait1+Trait2) <: &mut Trait1` is sound, though I want to consider it more deeply. Nonetheless, I am not happy about the rules for `&mut T` considering whether `T` is sized. 

I am not convinced this is related to #12470 -- can you open a separate bug perhaps to settle variance w/r/t DST and `&mut` more definitively?

Also, I presume that when you didn't have this code, various things broke?