ImmediateScheduler optimization for toObservableIterable

- the ImmediateScheduler no longer schedules itself but uses a loop
- 10-20x faster to use a loop rather than schedule itself recursively