Delegate the `eql?` and `hash` to a model's record

This delegates the `eql?` and `hash` methods of a model to their
record. This follows the pattern of the `==` method and ensures
that models will work correctly when ruby uses `hash` or `eql?`
to compare objects. This came up when array set operations were
used with arrays of models. They did not properly detect that 2
models were the equal and thus, didn't work at all.
Merge pull request #219 from redding/jcr-demeter-hash-eql

Delegate the `eql?` and `hash` to a model's record
Fix benchmarks from failing because of DB constraints

This fixes the benchmarks from failing due to DB constraints.
The DB constraints were added to test how record stacks handled
required and optional associations. Before this, all the
associations were optional and this is the assumption the
benchmark scripts were written with. Since this assumption is no
longer true, they needed to be updated. This updates to create
any models with the required associations and adds optional
associations that the benchmark scripts can freely set and unset
as needed.

This also re-runs all the benchmarks to create a new reference
point to compare future changes against.