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
This is the only test I see for the `...` pattern. Could we maybe include one testing that it actually matches the expected values, especially for floating point values?