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)
AFAICT, returning a reference like this limits the trait to contiguous-memory slices, e.g. it wouldn't be possible to write `x[n..m]` on a `RingBuf`, or a hypothetical fancier `StridedSlice<'a, T> { data: &'a [T], step: uint }` type that represents every `step`th element of `data` (i.e. `strided[i]` == `data[i * step]`).

I think this may mean it is only possible to use with `[T]` and `Vec<T>`.