This can be non-deterministic as each `onNext` is scheduled independently so the thread scheduling can happen in any order, thus this can break the ordering contract.

We went through a similar exercise getting `ObserveOn` working correctly. I think if this re-uses `ScheduledObserver` it would simplify this implementation and leverage the same sequential scheduling logic: https://github.com/Netflix/RxJava/blob/master/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java

I think the `ScheduledObserver` could just take a `Scheduler` that composes around whatever is passed in and adds the delay time.

That way we get the `enqueue` behavior: https://github.com/Netflix/RxJava/blob/master/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java#L53

I believe the same behavior for `onError` needs to exist as well (not immediate delivery) so it happens in the correct order, otherwise `onNext` events can be missed or attempt to come after `onError` has been sent.