replaceLast and some replaceFirst fixes

While testing of replaceFirst with utf8 string I found a bug and fixed that.
This lead me to add replaceLast because I needed such a function in the past and didn't want to retro four times.

This also adds doc unittests to both
Probably should check that `a` is unchanged.