Implement slicing syntax.

`expr[]`, `expr[expr..]`, `expr[..expr]`,`expr[expr..expr]`

Uses the Slice and SliceMut traits.

Allows ... as well as .. in range patterns.

r? @pcwalton (or anyone else)

closes #17177
Pretty much. It is only until we get a snapshot, and then I can change them to remove the `_`.