faster SubString UTF8String (worrisome diff Linux v Win)

```isvalid(SubString{UTF8String}, i)``` uses ```next()``` without ```done()```.  For i>sizeof(String) performance is very slow compared to ```isvalid(UTF8String,i)```.   

On linux, the difference is about 15x.  An example is below.

Worrisomely, the difference on Windows is far greater -- ```isvalid(SubString{UTF8String}, i)```  -- *3000-4000x* slower than ```isvalid(UTF8String, i)```  for i>sizeof(String).

This change addresses the performance of ```isvalid(SubString{UTF8String}, i)```, but I wonder if there might be a bigger problem with ```try``` clauses on Windows.

Linux example:
```
In [38]: s= "Σx +  βz - 2";

In [49]: ss= SubString(s,1,sizeof(s))
         sizeof(s), sizeof(ss), typeof(ss)
Out[49]: (13,13,SubString{UTF8String})

In [40]:
    ts = @elapsed isvalid(s, 1)
    ts = @elapsed isvalid(s, 1)
    ts = @elapsed isvalid(s, 1)
Out[40]: 1.132e-6

In [52]: @elapsed isvalid(ss, 1)
         @elapsed isvalid(ss, 1)
         tss = @elapsed isvalid(ss, 1)
Out[52]: 1.396e-6

In [53]: tss/ts
Out[53]: 1.2332155477031803

In [46]: @elapsed isvalid(s, 15)
         @elapsed isvalid(s, 15)
         ts = @elapsed isvalid(s, 15)
Out[46]: 1.086e-6

In [47]: @elapsed isvalid(ss, 15)
         @elapsed isvalid(ss, 15)
         tss = @elapsed isvalid(ss, 15)
Out[47]: 1.5733e-5

In [48]: tss/ts
Out[48]: 14.487108655616941
```