Moved UTF-8 character check out to UTF8Utils.
Addressed UTF-8 encoding issues.

Neither iconv nor mb seem to be able to convert UTF-8 surrogates
into UTF-8. As I understand it, this is an extreme edge case.
Still, the behavior in both cases is that the surrogates are
stripped from the string. We test for that condition, now.