On Windows we currently provide two separate ABI configurations. One which defers to vcruntime to provide the C++ runtime and another which doesn't.
Using vcruntime allows interoperability which programs compiled against the MSVC STL, and should be preferred whenever possible.
When deferring to vcruntime much of the ABI we provide changes. Including the layout of <stdexcept> types, their vtables, and how the linkage of their members.
This patch introduces the _LIBCPP_ABI_VCRUNTIME macro to denote this configuration. It also cleans up the existing configuration for using vcruntime.
This cleanup lays the groundwork for fixing a number of ABI and interoperability bugs in <stdexcept>.