FormulaInstaller and dependency improvements

I'm working on some improvements to how FormulaInstaller handles dependencies, among several other things, here:

https://github.com/jacknagel/homebrew/compare/deps

There is a lot to digest, and I apologize for that, but all of these improvements touch the same areas of the code, so trying to do them separately and then rebasing them on top of each other would be a nightmare.

Major changes:

 - Dependency and requirement expansion and requirement checking are factored out into separate methods, and build-times deps and requirements are now skipped when installing bottles.

 - FormulaInstaller now takes a lock on the formula being installed and all of its dependencies. This means that two Homebrew processes cannot attempt to install the same formula concurrently. In addition to `upgrade` and `install`, `uninstall`, `link`, and `unlink` all attempt to take this lock as well, so if you are installing foo, you can't `brew rm` foo or any of foo's deps, for example.

  The locking is implemented using flock(), which is only enforced among processes that attempt to take the lock, so there is no need for manual unlocking. As soon as the process that holds the lock terminates, the lock is released.

 - Adam's work on optional/recommended dependencies. Dependencies declared with `=> :optional` are disabled by default but generate a "--with-foo" option that can be used to enable them. Deps declared with `=> :recommended` are enabled but generate a "--without-foo" option to disable them.

 - Formulae can now request dependencies with arbitrary build options:

  ```rb
depends_on 'foo' => 'with-bar'
depends_on 'foo' => ['with-bar', 'with-baz']
depends_on 'foo' => %w[with-bar with-baz]
```

 - There is special handling for "--universal":

  If a universal build is requested, all dependencies must also be built universal, but only if they declare a universal option. This way, deps that are not compiled but merely installed (precompiled binaries, non-compiled code, other things that don't have a notion of "universal") do not need to be reinstalled. IOW, there is no need for complicated, ugly logic like

  ```rb
if build.universal?
      depends_on 'foo' => :universal
else
      depends_on 'foo'
end
```

  Rather, it is implied.