Describing Matchers

Introduce a new interface `Describer` that, when implemented, allows a matcher to add some additional information (like diffs!) to assertion failure messages.