Ensures String.slice always returns a string.

Both String.slice/3 and String.slice/2 now will return empty strings for
impossible or out of bound ranges, rather than `nil`.

Spinoff of issue #2410.