What we need to do it to build two heaps: rlist and exlist
Each heap contains multiple iterators (either RRule or ArrayIterator)
At each step of the loop, it calls all of the iterators to generate a new item,
and stores them in the heap, that keeps them in order.
This is made slightly more complicated because this method is a generator.