ProxyMatcher: fix .getErrorMessage()

What should be returned is the target's error message.
New DefaultParseRunner

This parse runner, unlike a basic parse runner, collects error messages from
rules.

If the rule does not have a custom error message, "parse error" is returned
instead.
MatchHandler: generify the interface itself, not .match()
Add tests for DefaultParseRunner

Now confirmed that error messages make their way into reports.
DefaultParseRunner: POC for debugging

Goal: replace TracingParseRunner etc.
Clear parse errors on successful match; not ideal

Ideally: another error reporting class...
MatcherPosition: fix hashCode()

.equals() uses reference comparison for matchers; .hashCode() did not. Fix that.
DefaultParseRunner: change default message
Try and improve debugging output