New matcher: `have_attributes`

see: https://github.com/rspec/rspec-expectations/issues/565

@myronmarston @JonRowe @cupakromer /cc

TODO's
- [ ] update README

funny - after all the discussion we had about this, I still ended up confused :-)

I liked @JonRowe's approach:
> The inverse case is in my mind rather simple, as it's just boolean algebra. 

note that we follow your suggestion then, ```{name: 'bob', age: 32}``` is a contradiction:

```ruby
# A && B  == FALSE
expect(person).to have_attributes(:name => "Bob", :age => 32) # fail

# !(A && B) == !A || !B == TRUE
expect(person).not_to have_attributes(:name => "Bob", :age => 32) # fail
```
which is I think the source of confusion - since you would've expect that, for the most part,  ```.not_to``` be the reverse of ```.to```.

which is the default behaviour, when ```does_not_match?``` is not defined:
https://github.com/rspec/rspec-expectations/blob/8d0ff29cd12a89b88ecb6bfd781c2f9b22c447b6/lib/rspec/expectations/handler.rb#L65-L79