Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
Why is it not diffable if it's negated?  I don't think any other matchers do that...