A Condition implements part of a multi-step match. We sometimes need to write matchers
that have a sequence of steps, where each step depends on the result of the previous
step and we can stop processing as soon as a step fails. These classes provide
infrastructure for writing such a sequence.
Based on https://github.com/npryce/maybe-java