Fix issues that GroupBy and Sample doesn't call 'unsubscribe' and also NPE when the key is null in GroupBy

Fix #1958
Oops, I forgot about this. This shouldn't happen if source is serialized, but if it happens, unsubscription can't happen because it would look like there is an active group even if there wasn't any GroupState for it. To defend against this, here we need that common ```if (wip.decrementAndGet() == 0) { unsubscribe(); }```