Environment DSL enhancements

This allows requirements to pass a block to the `env` DSL method.

```rb
env do
  append 'PATH', '/some/path/to/bin'
  # ...
end

env do |req|
  append 'PATH', req.some_path
end
```

This block is evaluated in the context of `ENV`, so it has access to all `ENV` methods (`append`, `compiler`, ...). The block can optionally take a parameter, and if that is so then the requirement itself is passed in so that it has access to other methods. This is meant to replace overriding `#modify_build_environment`.

Also, requirements can now use 

```rb
satisfy do
  # ...
end
```

or for simple conditionals that don't need the build environment and don't have any side-effects (loading a formula, etc.), passing a boolean is sufficient:

```rb
satisfy some_thing >= some_other_thing
```

instead of overriding `#satisfied?`. The contents of *this* block are evaluated in the context of the instance of the requirement class, so no changes need to be made to the code: it has access to all of the instance variables and methods as it did before.

When it is evaluated, by default it is wrapped in an `ENV.with_build_environment` block, which sets up the build environment and restores its original state when the block returns. This behavior can be disabled (reducing overhead) by passing `:env => false` to the method, i.e.

```rb
satisfy :env => false do
  # ...
end
```