Improving indexing into Swift Strings?

The semantics are essentially the same and of course the more abstract proposal should proceed. There is an argument for keeping it StringProtocol specific however given the special performance considerations compared to other collections.

I've updated the drop in StringIndex package to include another idea which has been doing the rounds, that of safe indexing with subscripts prefixed by the label safe: that return optional types for when the index is invalid. Assigning to an invalid index is still a crash.