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.

@kellyredding - Ready for review.