pretty sure this materializes the iterator. Can you point at docs that it does not?

I'd rather just do `sumsBuffer.grouped(blockSize).map(Future..sequence ... )` to get an Iterator[Future[T]]

Use a recursive function on that: `Iterator[Future[T]] => Future[Option[T]]` that never forces the whole Iterator into ram.