librustc: Allow trait bounds on structures and enumerations, and check

them during kind checking.

This implements RFC #11.

Closes #15759.

r? @nikomatsakis
Could you also add tests for these cases? (I think they're mentioned in the RFC as well)

```rust
struct Foo2<T> {
    x: Foo<T>, // error
}

impl<T> Foo<T> { } // error

fn foo<T>(f: Foo<T>) {} // error (with a generic T)
```