Work around MSVC issue with std::atomic initialization (#4777)
* Work around MSVC issue with std::atomic initialization
MSVC seems to have a bug where it does not use constant initialization
for std::atomic, which ends up causing crashes during initialization.
This change introduces a workaround by putting the std::atomic inside a
union, which causes the compiler to use constant initialization for it.
* Added an AppVeyor test for static linking with MSVC