Implement ConnectableObservable and Observable.publish

Following the behaviour of the .NET Rx implementation, a ConnectableObservable
consists of a Subject that can be connected to its source Observable by calling
the connect() method. The Observable.publish() method can be used to create a
new ConnectableObservable for the given Observable.