Interface for classes used to transport matcher debug information
Add methods to receive information about the last matcher run
Change debugging: return a matcher that represents the last performed matching process.
Matches updated to improved MatcherInterface.
Choice updated to improved MatcherInterface.
Fixed from type hint in docblock
Minor debug message layout changes.
Optional adjusted to improved MatcherInterface
Base class for testing with convenience helper asserts
Use base test class to increase test readability
Range updated to improved MatcherInterface.
Clean up tests
str_replace(implode()) is faster than implode(explode(implode)))

Benchmark looks like this with 5000 objects in the target array:
0: implode_explode took 0.0053331851959229 seconds
0: str_replace took     0.0037341117858887 seconds
1: implode_explode took 0.0049707889556885 seconds
1: str_replace took     0.0036580562591553 seconds
2: implode_explode took 0.0049469470977783 seconds
2: str_replace took     0.0035960674285889 seconds
3: implode_explode took 0.004857063293457 seconds
3: str_replace took     0.0034909248352051 seconds
4: implode_explode took 0.0048511028289795 seconds
4: str_replace took     0.0034780502319336 seconds
5: implode_explode took 0.0050830841064453 seconds
5: str_replace took     0.0039222240447998 seconds
6: implode_explode took 0.0054919719696045 seconds
6: str_replace took     0.0037119388580322 seconds
7: implode_explode took 0.0050609111785889 seconds
7: str_replace took     0.0038859844207764 seconds
8: implode_explode took 0.0048468112945557 seconds
8: str_replace took     0.0035660266876221 seconds
9: implode_explode took 0.0046710968017578 seconds
9: str_replace took     0.0034589767456055 seconds
Removed unused member variable
Sequence updated to improved MatcherInterface.
Sequence updated to improved MatcherInterface.
Enforce matcher isolation
Enforce matcher isolation
Match the end of a token stream
New OR matcher
Cleanup
Cleanup