Make `contain_exactly` work with out of order hashes.

The reason that this was failing is that `contain_exactly` assumed that
its `expected` value was a matcher. As such it was using === to compare
the expected value with the actual value. This is completely correct for
matchers. However, when a hash is passed the implementation of === will
not match the actual value at all. Hash === won't invoke the RSpec
matchers.

This fix uses the lower performance values_match? which correctly
matches when hashes are provided.

Fixes #574.
I'd also prefer it inlined FWIW.