Blocking buffer until experiment

This is a solution to the time gap problem for #844.

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).