UTF-16 support!

In fact, I haven't tried it with any wchar greater than U+10000. Since
in UTF-16 a wchar is either 2 bytes or 4 bytes and wchar_t in MSVC is 2
bytes, I think I'll be fine. If we want to move to GCC, we should have
our own wchar.