function unfold (f, seed) {
  return new Stream(new UnfoldSource(f, seed))
}
Compute a stream by unfolding tuples of future values from a seed value
Event times may be controlled by returning a Promise from f
@param {function(seed:*):{value:*, seed:*, done:boolean}|Promise<{value:*, seed:*, done:boolean}>} f unfolding function accepts
 a seed and returns a new tuple with a value, new seed, and boolean done flag.
 If tuple.done is true, the stream will end.
@param {*} seed seed value
@returns {Stream} stream containing all value of all tuples produced by the
 unfolding function.