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)
I do think stopping `for x in iter { ... iter ... }` from ever working is fairly bad. However, I believe this can be resolved by making `for` detect both `Iterable` and `Iterator` specially, rather than trying to handle them entirely uniformly.

I also think the difference between iterating a `&[T]` and `Vec<T>` would be surprising and confusing.

I'm not keen on "encouraging" consuming data structures in this manner, both because of the efficiency concerns of by-value iterators and returning by-value being more expensive, and just the problems of having too much allocation & cloning.

I'm slightly more concerned about the former than the latter, since we may be able to address overuse of `clone` via education, but the former may be a death-by-a-thousand-cuts performance drain.