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.
Should put `unlock` in a finally clause because Action1 may be ignored if already unsubscribed. E.g.,
```java
try {
            source.connect(new Action1<Subscription>() {
                @Override
                public void call(Subscription subscription) {
                    baseSubscription = subscription;

                    // handle unsubscribing from the base subscription
                    subscriber.add(disconnect());

                    // ready to subscribe to source so do it
                    source.unsafeSubscribe(subscriber);
                }
            });
}
finally {
      // release the write lock
      lock.writeLock().unlock();
}
```