Toward UTF-16 support in #2; work in progress.

The mechanics should be mostly here, but (i) the allocator wrapper needs some
refactoring so that it doesn't ever call `fatal` (since that will terminate the
entire process in REPL mode, rather than just print an error), and (ii) the
UTF-8 `string_info` function should probably check for invalid sequences rather
than just scan the high bits.