Faster first stage + addition of third stage with negated char class

First stage : applied improvement from @aivopaas  on JS Crush : scan
once, reuse strings on later iterations.
Third stage : build a negated char class (starting with a hyphen ^)
featuring characters from the original string - the tokens are all the
others.