function observe (f, stream) {
  return drain(tap(f, stream))
}
Observe all the event values in the stream in time order. The
provided function `f` will be called for each event value
@param {function(x:T):*} f function to call with each event value
@param {Stream<T>} stream stream to observe
@return {Promise} promise that fulfills after the stream ends without
 an error, or rejects if the stream ends with an error.