I suspect this won't read very well when used with the composed matcher aliases.  For example, `~a_value_between(2, 3)` produces this description: "not a value between 2 and 3 (inclusive)", when it would read much better as "a value not between 2 and 3 (inclusive)".

I think that to have `description` automatically produce an ideal string is a hard natural language problem.

What do you think about adding `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.