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 have added a bunch of contexts here, to wrap each interesting situation and add an example to it whether diff is rendered in that case or not. But it broke the style of how spec looked (It was more or less flat spec, now it is not). Is it a problem? Any suggestions on how to make this better?