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 rather see `e === a || a == e || values_match?(e, a)` in-lined above.  It's a perf-sensitive area of code, and with this abstraction you've added the following overhead for each attempted match:

* 2 more method calls (`optimize_match?` and `any?`)
* The creation of an extra array that'll have to be garbage collected.

Also, while my benchmarks showed that `e === a || a == e` was faster than `values_match?(e, a)`, it's very non obvious to me that `e === a || a == e || values_match?(e, a)` is faster than `values_match?(e, a)`.  Please run these benchmarks and report the results of the two ways:

https://github.com/rspec/rspec-expectations/tree/master/benchmarks/match_array