Move CompilerSelector logic into build env setup

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.

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.
superenv: don't set CC in ENV.clang/etc.

These methods were overriding CC and causing superenv to potentially
skip the compiler wrapper - especially if no wrapper existed for the
compiler being used, e.g. GNU GCCs.

Closes #22443.
Fixes #22249.
Fixes #22424.
Fixes #22506.
Fixes #22521.
Fixes Homebrew/versions#207.