[WIP] Add Negation Matcher

this is a rough draft based on the discussion started at:
https://github.com/rspec/rspec-expectations/issues/493

TODO:
- [x] add cuke
- [x] add specs for failure messages
- [x] add support for ```&``` and ```|```
- [x] update changelog
- [x] always make ```&``` and ```|``` available
- [x] add config for ```enable_boolean_neagtion_matcher ```
- [x] add ```description_when_negated``` as an optional part of the matcher protocol, that, if defined, would be used here? If it's not defined on the matcher, then it could fall back to this.
- [x] define initialize_copy: (https://github.com/rspec/rspec-expectations/pull/518/files#diff-afbc871db3c3948bc68aca8db1cb90dbR29)


**Changelog**
* Add support for matcher boolean AND `&`, OR `|` syntax.
    * `expect('A').to eq('A') | eq('B')`
    * `expect('A').to eq('A') & be_a(String)`
    (Adam Farhi)
* Add support for negative form compound matcher expressions using `~`.
    * `expect(stoplight.color).to ~eq("blue")`
    (Adam Farhi)
* Add support for matcher boolean negation operator `!` syntax.
    * `expect(stoplight.color).to !eq("blue")`
    Disabled by default, enable by doing:
    * `RSpec.configuration.expect_with(:rspec) { |c| c.matcher_boolean_negation_operator = true }`
    (Adam Farhi)