MatcherContext: make .hasMismatched() return a boolean instead of a Boolean

That is an API change, sure, but a minimal one; it couldn't return null anyway.
More comments in context/matchers
Start and reimplement MatcherContext
Add getters to MatcherPath and MatcherPath.Element

Goal: make them interfaces, again.
Extract interface for MatcherPath and MatcherPath.Element