Don't crash if there is no value. Just return false.
Removed IfToken part. It wasn't used.
Removed annotations feature. (It wasn't even mentioned in the language spec, and I don't need it).
Removed clone().
Removed tokenIndex from Token.
Removed sourceName and emit method from Token.
Removed unused variable.
Removed unused methods.
ForEach iteration state is now kept outside of the token, so the token can be used concurrently.