improve parse errors by tracking the furthest failure

this is the approach already taken in Parsimmon