make next(::UTF8String, i) a bit more robust. fixes #7525

skip 1 byte when returning an invalid character, because the data might be
Latin-1, and the result is not well-defined anyway.

the previous performance hack in next() is no longer necessary, since
returning tuples is now fast.