15-20x speedup on .NET strings

Modified StrToCharPos() and CharToStrPos() to count in terms of UTF-16
code units instead of Unicode code points. This is consistent with .NET
strings, whose length is the number of 16-bit code units, not the number
of display characters. This change also fixes off-by-n errors in
Capture.Value, where n is the number of code points outside the BMP
preceding a capture in the input.

As a side effect of the above, all uses of
StringInfo.LengthInTextElements have been eliminated, which is good
because the underlying function is hideously slow. Tests that used to
take 2000+ms now run in 100-150ms, making Re2.Net competitive with .NET
Regex for searching strings.