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)
All of the methods on slices currently come through traits, so another possible alternative would be implementing the traits for `String` and `Vec` directly? I would expect all methods would be default in terms of `as_slice()`, so the trait implementations for `Vec` and `String` wouldn't be too lengthy.

This would only solve half the problem, though. Calling methods would be much nicer, but passing arguments would still require a manual `.as_slice()`. I think I prefer slicing syntax over this, but it may be worth considering as an alternative.