Make entire library code compile on MSVC & gcc.

I fully agree that we should not start to use leading underscore, as
well as being consistent in using the internal namespace.

> names that start with an underscore are typically considered reserved
> for the compiler support library.

This is not entirely correct.

Leading double underscore and leading underscore followed by an
uppercase character, such as __identifier and _Identifier, is
exclusively reserved for the implementation.

The same holds true for leading underscore, such as _identifier, in
global namespace. Thus, its usage as identifier in user defined
namespaces and as members is fine.

Best,
Matthias