Add detect_toolchain and Clang support (prefer Clang over GCC). Some
dependency work for MSVC's boost_assign handling.