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)
>  It should be possible to use this with other unsized types as well (i.e., structs with embedded [T] fields).

How many such types will we have for which slicing makes sense? I can only think of minor variations on the 4 types above e.g. different allocators (which `Vec<T, Allocator>` would solve anyway) and interned strings ala `libsyntax`'s `InternedString`.

(My point here is this RFC isn't particularly flexible; it's really nice for the places it does work.)