ByteVec/Str: handle invalid UTF-8 data correctly without branches.
UTF8String: use branch-free decoding. unfortunately, it's slower.