rewrite OnSubscribeRefCount to handle synchronous source

Resubmitting this one having stuffed up the rebase.

Rewrite of ```OnSubscribeRefCount``` because original didn't handle synchronous source (#1688) and as far as I could see the original was fundamentally broken by this use case. Please note also includes a fix in ```OperatorMulticast``` where a null check was required. I've done the rewrite using locks rather than submit a lock-free version just to ensure that the approach is valid with the experts first.
unsubscribing a `CompositeSubscription` will do nothing if there is no Subscription in it. If a `CompositeSubscription` is already unsubscribed, any further Subscription will be called once it's added into `CompositeSubscription`. So if `baseSubscription` is a `CompositeSubscription`, the race condition will be eliminated.