The History object is used to avoid backtracking too far. In particular, when a greedy repeat
operator allows zero repetitions (something we try to optimize away, but it isn't always possible,
then if we backtrack all the way to the start position, we only allow a match at this position if
no match at this position is currently recorded in the history.