CompilerFailure: don't mutate compiler hashes

Fixes #28357.
Allow factory to pass an options hash to the formula instance
Decouple spec selection from ARGV entirely
Add ARGV.spec and use it as the default
formula equality should reflect the active spec
Drop support for defining options as a method
Initialize BuildOptions lazily
Move some behavior from BuildOptions into SoftwareSpec
rip out dependency handling
update method name
start work on visitors
add simple graphviz visitor
start porting brew-graph to core