Terminate with an error instead

Apparently the transactional invariant violation fixed itself (or has a
race condition).
Move all MainScheduler stuff into Scheduler.Main
Combine channel implementations, and terminate on error/completed
Return () from all test functions