Reduce all function expression allocations when speculatively parsing or looking ahead.

Also, make speculative parsing much more flexible.  It now no longer always rewinds just because an error was encountered during parsing.  Instead, the speculative method has full control over deciding if rewinding is necessary or not.  (Note: this flexibility was necessary to be able to remove the function expression allocations).
We can tell the user intends to make a generic function call, and we now just tell them they're missing the '(' token.