RFC: cmp and ops reform

This RFC proposes a number of design improvements to the `cmp` and
`ord` modules in preparation for 1.0. The impetus for these
improvements, besides the need for stabilization, is that we've added
several important language features (like multidispatch) that greatly
impact the design. Highlights:

* Make basic unary and binary operators work by value and use associated types.
* Generalize comparison operators to work across different types; drop `Equiv`.
* Refactor slice notation in favor of *range notation* so that special
  traits are no longer needed.
* Add `IndexSet` to better support maps.
* Clarify ownership semantics throughout.

[Rendered](https://github.com/aturon/rfcs/blob/cmp-ops-reform/text/0000-cmp-ops-reform.md)
Could these be unified as:

```rust
struct Range<Idx> {
    low: Option<Idx>,
    high: Option<Idx>
}
```

and then `i..j` is `(Some, Some)`, `i..` is `(Some, None)` etc.? Downsides I can think of are losing the ability to be specific about exactly what sort of slicing works, but benefits include not forgetting to implement one of them.