Update benchmark allocations helper to support min count.

This is useful when we have many groups because each group
is a separate class.
Refactor specs to not use private config API.

`config.include_extend_or_prepend_modules` is an internal
API that I plan to change in an upcoming commit.
Remove spec for behavior we will no longer be supporting.

Fully supporting metadata mutation is fraught with difficulties
see (rspec/rspec-rails#829 and the attempted fix in #1089).
For RSpec 3, we decided to expose `define_derived_metadata`
as an officially supported way to accomplish the sorts of
things metadata mutation was used for in RSpec 2. This spec
got left behind (since it was passing at the time, it wasn't
noticed) but isn’t something we want to support going forward
since module inclusion shouldn't mutate metadata. It’s also
getting in the way of a perf optimization I'm implementing.
Reify new FilterableItemRepository abstraction.
Refactor config metadata filtering to use new FilterableItemRepository.

This should perform better.
Add benchmarks demonstrating that our optimization is in fact faster.
Reduce BaseHookCollection API.

We don’t need all array methods.
Move hook selection into base hook collection.
Remove unnecessary helper method.
Combine filtering and running hooks into a single method.

Before, these things were split into separate methods (`for` and `run`),
even though they are never needed individually. The split caused us to
create extra unnecessary instances of `HookCollection` in order to
maintain the extra state between `for` and `run` without mutating the
existing instance.

The allocation benchmarks show that this reduces the number of objects
created per example group by 2 arrays and 2 HookCollection instances.
Move method def to be nearer to similar methods.
Refactor around hook execution.