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
The `...` pattern is not part of this PR, I only 'change' `..` to `...`. So there should be other tests, just not covered here. If not, then please file an issue for it - it's orthogonal to this one.