Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
I tried again quickly, the reason why it wasn't working is there's no diff, the expected attributes match the actual values, so it's a bit nonsensical