Linear time NFA findAll
Types
- RegexMatches2 = object a, b: Pstates m: Matches c: Capts3 look: Lookaround 
Procs
- func dummyMatch(ms: var RegexMatches2; i: int) {....raises: [], tags: [].} 
- hack to support split last value. we need to add the end boundary if it has not matched the end (no match implies this too)
- func fillMatchImpl(m: var RegexMatch2; mi: MatchItemIdx; ms: RegexMatches2; regex: Regex) {....raises: [], tags: [].} 
- func findSomeImpl(text: string; regex: Regex; ms: var RegexMatches2; start: Natural = 0; flags: MatchFlags = {}): int {....raises: [], tags: [RootEffect].} 
- func findSomeOptImpl(text: string; regex: Regex; ms: var RegexMatches2; start: Natural; flags: MatchFlags = {}): int {....raises: [], tags: [RootEffect].} 
Iterators
- iterator bounds(ms: RegexMatches2): Slice[int] {.inline, ...raises: [], tags: [].} 
- iterator items(ms: RegexMatches2): MatchItemIdx {.inline, ...raises: [], tags: [].}