Higher-kinded Types

First commit that introduces the notion of HKTs. Specifically, this
commit introduces a new syntax for declaring abstractions over types.

```rust
trait Foo<F[M]> {}
```

And also,

```rust
trait Foo<F[_]> {}
```