automatically NULL-terminate UTF16 data for passing to Windows APIs

As discussed in #7008, this changes the `UTF16String` type to automatically append a NULL word at the end of its data (upon `utf16(x)` conversions, or to require it in the constructor).  This is not treated as part of the string for iteration etcetera, but allows the string to be passed directly to Windows (and similar) API functions expecting NULL-terminated UTF-16 data.