This is the rewrite of RunMutState ++ MutRun. It is supposed to never backtrack in the consumption of the input. This is more complicated then RunMutState which only considered a single starting offset, and MutRun which incremented the starting offset by one with each failed match.
This is not optimized for speed.