Yield from multiple iterators as values become available
copied from cf-staging / interleaveThe interleave
package provides a function of the same name that takes a
number of iterators, runs them in separate threads, and yields the values
produced as soon as each one is available.