Refactor metadata setup code in specs.

Rather than instantiating it and calling `process`, it makes more sense
to pass in all the args into one method. This prepares the way for that.
Move code around so it's clear which methods are for which modules.
Convert Metadata to use composition rather than inheritance.

- It's best to avoid subclassing core types like Hash.
- Remove runtime module extensions, since that blows MRIs method
  caches and has an affect on perf.
- Instantiation was a two part process: `.new` followed by `process`.
  Conceptually, these belong together, so switch to using a single
  method for instantiation.

Two gotchas I discovered:

- The `include` matcher didn't initially work properly with `Metadata`.
  It uses an `is_a?(Hash)` check to know how to treat the object.
  To solve this, we override `is_a?` to return true for Hash.
- `dup` didn't work as expected. `dup` is used to get a copy that can be
  modified without affecting the original; however, `dup` was simply
  duping the wrapping object, and each retained a reference to the same
  wrapped hash, causing changes on one to show up on the other. I override
  `dup` and `clone` to address this.
benchmark to show DelegateClass performance degredation
add forwardable to delegate benchmarks
remove delegateclass
implement all the methods required by rspec for metadata as a direct passthrough to inner hash