support proper merging of nested conditionals

Currently, nested option blocks containing conditionals like this:
```ruby
with_options(:if => {:awesome => true}) do
  with_options(:if => {:less_awesome => false}) do
    expose :awesome_thing
  end
end
```

will produce an exposure that reflects only the innermost conditions:
```ruby
{:if => {:less_awesome => false}}
```

To me, this is unexpected behavior.  I would expect the following exposure from the code above:
```ruby
{:if => {:awesome => true, :less_awesome => false}}
```

This pull request enables proper merging of nested conditionals.  All `Hash` conditions are merged into a single hash.  `Proc` and `Symbol` conditions are pushed to a special "extras" array.  For evaluation, the hash is added to the extras array and all the conditions are logically ANDed together.