Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
It feels a little "wrong" to me to have a predicate method have the side effect of performing some internal caching.  I wonder if it would be clearer/simpler to do something like:

``` ruby
def matches?
  perform_match(:all?)
end

def does_not_match?
  perform_match(:none?)
end

private

def peform_match(predicate)
  get_all_attributes
  expected.__send__(predicate) do |attribute_key, attribute_value|
    values_match?(attribute_value, @attribute_values.fetch(attribute_key))
  end
end

def get_all_attributes
  @attribute_values = Hash[ expected.keys.map { |attr| [attr, @actual.__send__(attr)] } ]
end
```

I think that also solves the reason I'm guessing you used `inject` for?  Since you want to make sure it accesses and caches all values and not abort early on the first mismatch?  Given it's a requirement to get all values I think making that an explicit step is better.