Refactor abc::file into a hierarchy

Now each OS-native file type has its own implementation class, so each of
them needs no special-case logic.

This also allows to have a separate abc::console_file class, which is
necessary under Win32 to use different read/write API functions.
Fix compiler errors due to last-minute method name change
Fix bugs and compiler errors in Win32 code paths of new abc::file class hierarchy
Qualify abc namespace in U{16,32}CL() for Intellisense

MSC16 is able to resolve the abc namespace in the context of the namespace
itself, but Intellisense apparently can’t, and it marks the expansion of
U16CL() and U32CL() as an error. Qualifying abc as ::abc solves this error.
Add TODO to verify that ::WriteConsole() can handle UTF-16 surrogates
Qualify abc namespace in _abc_trace_scope_impl() for Intellisense

MSC16 is able to resolve the abc namespace in the context of the namespace
itself, but Intellisense apparently can’t, and it marks the expansion of
_abc_trace_scope_impl() as an error. Qualifying abc as ::abc solves this
error.