Optimize String.slice by using binary_part

This is not the actual optimization we've been discussing yet, but it was easier to get done. More to come tomorrow.

Benchmarks (input string – `String.duplicate("hello world", 10000)`, full code – https://gist.github.com/alco/aea769ba02dce93de29f#file-slice_10000-ex):
```
# master
StringSlice.slice left half:         100   20628.67 µs/op
StringSlice.slice right half:         50   33514.14 µs/op
StringSlice.slice almost all:         50   40865.84 µs/op
StringSlice.slice -1:                 50   63981.30 µs/op

# PR
StringSlice.slice -1:           10000000   0.60 µs/op
StringSlice.slice left half:         100   15272.15 µs/op
StringSlice.slice right half:         50   29207.42 µs/op
StringSlice.slice almost all:         50   30960.10 µs/op

# speedup
# This is the ratio of (PR execution time) / (master execution time)
StringSlice:slice -1:         0.0
StringSlice:slice left half:  0.76
StringSlice:slice almost all: 0.77
StringSlice:slice right half: 0.88
```

As a graph:
![slice_10000](https://cloud.githubusercontent.com/assets/207748/3578699/19aa09f6-0baf-11e4-83f1-04f3f4d584dd.png)