I really, really don't like the idea of modifying the iterator prototype for these cases. And honestly I don't think they are really necessary. Yes, map, filter etc. should return the type they are acting on, but since that is explicitly an array with the spread, this is not a problem.
There is also no need to differentiate between a spread array and a spread generator, both could be auto-optimized not to create intermediary arrays and instead act similar to a transducer.