Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
@waterlink took the same approach, I tried to make it diffable when negated but it didn't work, which I think is because it never gets the values to cache, I'l try again later