Superkinds

For #7083.

I am still debugging one issue with this, namely that I have busted metadata encoding of supertraits in library crates. The following program:
```
#[crate_type="lib"];

pub trait Bar : Freeze { }
```
...ICEs with ```node_id_to_trait_ref: no trait ref for node `trait Bar (id=1)` ```, presumably because I made a change that didn't insert builtin-kind-supertraits into the trait ref map earlier. So don't r+ this yet.

This is also not the full solution to #7083, because this is not supported yet:
```
trait Foo : Send { }

impl <T: Send> Foo for T { }

fn foo<T: Foo>(val: T, chan: std::comm::Chan<T>) {
    chan.send(val);
}
```
cc @nikomatsakis