Optimize Lexer

.nextUntil*() and .popUntil() are code hot spots; Made
them much more efficient and garbage a lot less Arrays.
Consequently, they only get two parameters:

; callback
: The function to invoke for each token in the list,
  until either there's no more tokens left, or it
  returns a falsy value for that token.

; extras
: Any extra parameters to pass to the callback function,
  in addition to the current token.