Made a special cases StringValue for normal non SurrogatePair strings.

This makes the `length()`, `charAt()` and a few others fast again!

Three separate commits:

- #5cf5982 moves the StringValue into a nested class
- #5f65257 implements the extra simple class
- #5d34a54 tries to avoid scanning the whole string if we know it will still contain SurrogatePairs.

This is an easier alternative to impulse-org/pdb.values#35

The `replace` method is not reimplemented for the simple string since this would duplicate too much logic.