Move CompilerSelector logic into build env setup - fixes fails_with in superenv

This moves the CompilerSelector fails_with logic into the build environment setup, making the compiler selection available *before* performing actions that depends on knowing what the compiler is, e.g. setting up PATH. In the past we were setting up PATH before we had fully determined factors that were needed to set it, e.g. compiler. Homebrew-installed compilers need to be in the PATH in order to function in superenv, but the selection could happen long after superenv had determine the path.

ENV.setup_build_environment now optionally takes a Formula argument to provide the information necessary to do the fails_with, and the new ENV.validate_cc! extracts the fails_with logic from Build.install.

This also fixes superenv's ENV.clang/etc. methods, which were overriding CC and causing superenv to potentially skip the compiler wrapper. This led to build failures like #22424, where a compiler was being called by name instead of via `cc`. Instead the methods all now simply set HOMEBREW_CC.