make have_attributes matcher diffable (in some cases)

fixes #667 
related to #668 

My attempt to make `have_attributes` matcher diffable:

- diffable, when failed because of different values

  Example:

  ```diff
  -:name => "Wrong Name",
  +:name => "Correct name",
   :age => 30,
  ```

- diffable, when used with matchers in expected values and when failed because actual values don't match

  Example:

  ```diff
   :name => "Correct name",
  -:age => 30,
  +:age => (a value < 25),
  ```

- not diffable, when negated
- not diffable, when `respond_to` failure

Regarding to this comment https://github.com/rspec/rspec-expectations/pull/668#issuecomment-58739468 I would like to add spec specifically showing how diffing works when multiple composable matchers are used as expected values.

Feedback is welcome. Especially in spec suite for this.

Is it needed to change anything in cuke for this feature to show that this matcher has diff output for users?

/cc @myronmarston @JonRowe 
I don't get it, the error is still there. Why this object does not `respond_to` with 0 arguments: https://travis-ci.org/rspec/rspec-expectations/jobs/37728040#L206-L209