Refactor change matcher.

* Use separate classes for relative vs specific changes.
* This greatly simplifies the `matches?` and `failure_message`
  logic.
* Reduces the number of instance variables are floating around.
Add proper descriptions for change matcher variations.