fix for merge dropping values from scalarValueQueue and not completing during request(..) when the last value emitted was from scalarValueQueue
Remove Comment

This comment is no longer correct. 1420 was resolved.
Synchronize Access

The `wip` variable needs its access to be synchronized. Then it calls drainAndComplete outside the lock.
Merge pull request #1726 from benjchristensen/fix-merge-1723

Fix Merge: backpressure + scalarValueQueue don't play nicely
back pressure support for group by operator
groupByUntil -> groupBy

This collapses groupByUntil and groupBy into a single groupBy operator. The new implementation has 2 major changes:

1) It supports reactive pull backpressure.
2) Child GroupedObservables can be unsubscribed and they will be cleaned up and then new instances for the same key can be emitted, like groupByUntil, except that now instead of passing in a special durationSelector function, the child can be composed using take/takeUntil/etc to cause an unsubscribe.

If the previous non-obvious groupBy behavior is wanted, then instead of unsubscribing, it can be filtered to ignore all further data, which is what the old groupBy used to do when a child was unsubscribed.
Request Up When Dropping Values
ObserveOn Cleanup

- make code easier to understand with some refactoring of the pollQueue loop
- add a unit test to ensure correct behavior with a hot Observable source
ObserveOn Error Propagation

- errors were not being propagated if backpressure was exerted (requested==0)
- terminal events do not need to be requested so it now ignores the requested count to emit onError
Merge pull request #1727 from benjchristensen/groupByWithBackpressure

Proposed groupBy/groupByUntil Changes
Merge pull request #1728 from benjchristensen/observeOnErrorPropagation

ObserveOn Error Propagation
Merge pull request #1729 from benjchristensen/combineLatest-1717

CombineLatest: Request Up When Dropping Values