rewrote replay to emit to all observers, and added replayForObserver. This makes the replay function easier to define, since this.out can be used instead of needing a separate sink
tried an implementation of merge.replay that should work for complex streams as well