RFC: associated items and multidispatch

This RFC extends traits with *associated items*, which make generic programming
more convenient, scalable, and powerful. In particular, traits will consist of a
set of methods, together with:

* Associated functions (already present as "static" functions)
* Associated statics
* Associated types
* Associated lifetimes

These additions make it much easier to group together a set of related types,
functions, and constants into a single package.

This RFC also provides a mechanism for *multidispatch* traits, where the `impl`
is selected based on multiple types. The connection to associated items will
become clear in the detailed text below.

[Rendered view](https://github.com/aturon/rfcs/blob/associated-items/active/0000-associated-items.md)
How does this interact with nested items?

E.g.

```rust
trait Foo {
    type T;

    fn method(&self) {
        fn nested() -> T { ... }
    }
}
```

Specifically, is the `T` in scope for `nested`? If so, this differs to any other generic parameters; if not, this differs to a non-associated type would be in scope there. (It presumably should be the former, since they're generics at heart.)