Make it RSpec 3 compatible

RSpec changes its matcher DSL in RSpec 3.0.0, which deprecated the `Matcher#failure_message_for_should` and `Matcher#failure_message_for_should_not`. 
Quoted from http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3

> ### Changes to the matcher protocol
> As mentioned above, in RSpec 3, we no longer consider should to be the main syntax of rspec-expectations. We’ve updated the matcher protocol to reflect this:
> `failure_message_for_should` is now `failure_message`.
> `failure_message_for_should_not` is now `failure_message_when_negated`.
> `match_for_should` (an alias of match in the custom matcher DSL) has been removed with no replacement. (Just use match).
> `match_for_should_not` in the custom matcher DSL is now `match_when_negated`.

This PR change the original block defined custom matcher to a matcher class, which allow us to also alias method to compatible with older versions of RSpec.

Please check if this is applicable, thanks :-)