Use 'new Function' instead of eval

This performs slightly better, likely because of scoping differences:

"Functions created with the Function constructor do not create closures to
their creation contexts; they always are created in the global scope. When
running them, they will only be able to access their own local variables and
global ones, not the ones from the scope in which the Function constructor was
called. This is different from using eval with code for a function
expression." (from
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)

I also left in a commented-out tokenizer source saving variant which can be
useful for benchmarking.

Change-Id: I80e94e355119e778cb9b92bdb54ca779df855ba1