Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
If the point of caching variables is to ensure we get an "at comparison" view then we should `dup` to ensure things like hashes don't get mutated before we print them out.