Adding an abstraction for publishers, inspired very loosely by the
ReactiveExtensions.