Operator repeat

I've reimplemented repeat() with the new lift/subscriber semantics, but run into a few problems:

- The previous ```observeOn``` implementation didn't work for some reason with some of the repeat tests. Haven't really looked into them, but instead reimplemented observeOn with the new semantics and with queue/drain method, which brought up some further issues.
- Changed the TestScheduler a bit as I've run into cases where the internal queue's order was not of the order of the schedule (typically when using 0 as delay) which caused tests to get rearranged events. Adding a monotonic id helps distinguish between tasks scheduled for the same time.
- GroupBy had some problem where it duplicated ```childObserver.onCompleted``` when run with staggered groups. It broke merge. I've added a once-check to it to make it work. Might need to utilize the same completeInner() logic than the groups.
- Broke ```OperationParallelMergeTest```. I'm not sure why they don't work. Maybe it gets 3 parallelism but the thread Ids keep changing underneath. I never understood the expectations in those tests.