Improved support for Hamcrest matchers

The Hamcrest implicit incorrectly treats the matcher.describeTo method as the failure (mismatch) description. It really is the description of what is expected. In addition, Hamcrest 1.2 introduced a new method on the Matcher interface, describeMismatch, which allows Matchers to provide specific details on why the actual value does not match the expected value.

I've updated the implicit to generate a message more consistent with what Hamcrest users expect that takes advantage of the describeMismatch method.

Moving to Hamcrest 1.2 shouldn't be a problem because most Hamcrest users have moved on to 1.2 or higher.