Support for String#scrub

Note that this is currently still a work in progress so expect plenty of Git rebases.

In the current implementation it uses `Encoding::Converter` (thanks to @headius for that one) which isn't exactly webscale. The options we have are either tuning the Converter API or moving the code to C++. Another option is to see if we can port over MRI's C logic to pure Ruby, but I'm not sure how well that would work.