An implementation of LINQ in JavaScript use ES6 iterators for proper lazy evaluation