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 allocations).