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 are no longer thrown off by the errant token after the comma.  Instead, we still properly recognize this as a generic function call.