Simplify Generator types and improve stability

The performance of the fully-typed NGenerator was very nearly the same as Generator1, so lets go back to just one Generator type for now.
There was a type instability in the return values from the anonymous function. Adding ::T to getindex improves performance by 2x and reduces allocations by 2x.
Change the macro to create the Generator call programmatically to easily test the impact of adding type specifications to the arguments.  Unfortunately, adding types to the arguments is a performance regression.