format.py and config.py were routinely reaching into the innards of compiler.py, then setting variables in a very gcc / clang-centric way. Now, all the compiler specific code has been moved to compiler.py. These makes it possible to (in theory) build with MSVC instead, by switching to a different CXXCompilerInterface implementation.
This refactor did not attempt to make large, simplifying changes. It is mainly moving code to the right place so that later work can consolidate and clean as needed.
As a proof of concept, I was able to switch out CXXCompilerInterface implementations and run the libc++ tests with MSVC 2017 and the MSVC 2017 STL, with 3486/5472 passing (I didn't dive into the failure cases). The MSVC test infrastructure port is not included in this review.