Add a monadic unfoldM, which makes sense for streaming

As a plain function `unfoldM` is partial, since it may never return the final list; but in a streaming context, it makes perfect sense.