UTF8 <-> UTF32 support.
Basic UTF8 support for JSON.

We ignore UTF8 entirely apart from \uXXXX escapes which are expanded on
read to the appropriate UTF8 sequence.

We no longer use \uXXXX escapes when encoding - we assume that the strings
already contain valid UTF8.