task iter does not consume in done call. fixes #6447

This changes the iterator for `Task` to consume only in `start` and `next` calls.
The `istaskstarted` check in `start` is to allow it to be called multiple times from `isempty`.