Overhaul compiler selection code

There are three main things I want to fix in the compiler selection process:

 1. `--cc=` should override any fails_with declarations, so that other compilers can be tested without editing the formula
 * `setup_build_environment` should only set the compiler once, instead of once plus a second time if `fails_with?` returns true
 * allow extra compiler failure objects to be passed into the selector at runtime, so that `build.cxx11?` can imply `needs :cxx11`

This pull request implements (1) and (2), and lays the groundwork for (3).

In particular, the compiler priority queue is gone, replaced with static lists based on `MacOS.default_compiler`. `fails_with?` is moved from the formula instance into the selector, where that logic belongs.

Open questions:

 * In this PR, both `--cc=` and `HOMEBREW_CC` override any `fails_with` declarations because they share the same code path. But `HOMEBREW_CC` can be set permanently by the user, so that's likely not the behavior we want. They should probably be handled separately, but it's not clear to me how setting `HOMEBREW_CC` should influence the selection logic.
I'd really like to replace `MacOS.default_compiler` with something that is based on actual compiler versions, and not whatever `/usr/bin/cc` happens to point to or whatever `Xcode.version` reports.

Something like

```rb
def default_compiler
  return :clang if clang version >= 318
  return :gcc if gcc-4.2 is available
  return :gcc_4_0 if gcc-4.0 is available
end
```

but it wasn't immediately clear to me (a) what should happen if none are available (return `:gcc` like we do now? raise an exception?), and also I'm not sure how this would interact with Linuxbrew (it would probably need its own implementation, which isn't a huge deal), so I punted on it for now.