RFC: overloaded slice notation

This RFC adds *overloaded slice notation*:

- `foo[]` for `foo.as_slice()`
- `foo[n..m]` for `foo.slice(n, m)`
- `foo[n..]` for `foo.slice_from(n)`
- `foo[..m]` for `foo.slice_to(m)`
- `mut` variants of all the above

via two new traits, `Slice` and `SliceMut`.

[Rendered](https://github.com/aturon/rfcs/blob/slice-notation/active/0000-slice-notation.md)
I don't understand exactly why HKT is invoked here. I just did some testing with these traits returning just `S` and everything seemed to work fine.

Again, I am going to protest this RFC just like the `Index` traits one because it does not support lazy evaluation, which is critical to making efficient mathematical libraries. In particular, it seems clear that if this specific design is kept, it will need to be supplemented by `SliceSet` and `SliceGet` like Index should be.