Improve have_attributes matcher failure message.

Improve hash attributes failure message by caching values and enumerating in output.

Fixes #667
Gotcha.  It would be good to have a spec explicitly for this case (e.g. that shows that all attributes in the failure message are included even if the first one was mismatched).

Also, I think this can better be handled by get all attribute values as an explicit first step, as I recommend below.