RFC: Collections reform

This is a combined *conventions* and *library stabilization* RFC. The goal is to establish a set of naming and signature conventions for `std::collections`.

The major components of the RFC include:

* Removing most of the traits in `collections`.

* A general proposal for solving the "equiv" problem, as well as improving `MaybeOwned`.

* Patterns for overloading on by-need values and predicates.

* Initial, forwards-compatible steps toward `Iterable`.

* A coherent set of API conventions across the full variety of collections.

*A big thank-you to @Gankro, who helped collect API information and worked through an initial pass of some of the proposals here.*

[Rendered](https://github.com/aturon/rfcs/blob/collections-conventions/active/0000-collections-conventions.md)
It renders the container unusable later, so people will apply the `clone` hammer; e.g. with a scenario like

```rust
let v: Vec<int> = ...;
let mut result = 0;
for x in v {
    result += f(x);
}

return (result, v);
```

I'm 100% sure that there will be people who fix the compiler error with `for x in v.clone()` (and I would guess that it won't be a trivial number). I also have a feeling that consuming iteration is likely to be the least efficient in general:

- large values will be (in general) unoptimisably memcpy'd around
- when iterating over something complicated like treemap, consuming it will probably have to be quite careful to avoid crashes; possibly at the expense of speed