Proposed solution to the time gap, using unbounded buffering.

This is a solution to the time gap problem for #844.

- Currently, it uses an unbounded buffer. I'll think about a bounded approach later on.
- I've added an subscribeOn overload where the user can explicitly request a buffering behavior. In addition, SubscribeOn checks the type of the Observable and enters buffering mode for GroupedObservable and PublishSubject. I think these code options should be mutually exclusive: 
  1. either we only check for Observable type, but then new kinds of observables or hidden observables won't work,
  2. or ask the programmer in the documentation/tutorial to explicitly request buffering in certain operator compositions.

I personally favor option 2).