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.
I think this could disconnect the source immediately if one thread reaches L125 while another thread reaches L81 (because the counter was decremented to 0 and then incremented to 1 in the latter thread), i.e. prevent the reconnect.