Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
These two lines are duplicated between `matches?` and `does_not_match?`:

``` ruby
return false unless respond_to_attributes?
cache_all_values
```

Would it make sense to move those into `perform_match`?