Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
I'd tend to use `@values.fetch(attribute_key)` over `@values[attribute_key]`.  In general, I prefer `fetch` as it surfaces problems sooner rather than getting downstream `NoMethodError for nil` exceptions.  In this case, I don't think it's possible to have a missing entry in `@values` so they will act identically but `fetch` has the side effect of making explicit our knowledge/assumption that every key will be in the hash.  `@values[attribute_key]` is not as clear -- in the future, returning to this code, I could see myself being unsure if all the keys will be in there and if it will get some `nil` values by default.