Add String.split_at

While it is straightforward to split a string given
an offset in bytes from its beginning like this

    <<left::[binary, size(offset)], right::binary>> = string

splitting at grapheme boundary or using negative offset
is not so simple. Hence this function.