Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
I'm not sure it's needed.  What's an example of an object that would have attribute values get mutated while this matcher is performing it's match logic?

I dislike "just in case" logic so I'de like to see a real-ish example that shows that this is needed if we're going to keep it.