Fix Parallel.For to read items from collection as needed

The Iterable I was passing to For was a database cursor with hundreds of thousands of records. With the current code first all of the elements would be read and then the parallel tasks would be kicked off. At some point this could lead to memory exhaustion though I didn't face it. A better approach is to read the elements from the collection as needed.

ForFJ does the same thing and likely needs to be updated as well.