This is part of a collection of commits that aim to improve failure
messages across the board, in order to make matchers easier to debug
when something goes wrong.
* Have the failure message describe more clearly what the `allow_value`
matcher was trying to do when it failed.
* Make the description of the matcher more readable.
* For each value that `allow_value` sets, use a different Validator
instance. The matcher still changes state as it runs, but a future
commit will refactor this further.
* Merge StrictValidator back into Validator, and remove it. The way that
StrictValidator worked (as a module that was mixed into an instance of
Validator at runtime) was confusing, and there's really no need to
split out the logic anymore.
* Fix or fill in tests involving failure messages and descriptions.