We want to have `Scheduler` as a separate abstraction, something that does not imply `WorkstealingTreeScheduler` at all. The idea is to have an abstract, lightweight, class `Scheduler` with a single method:

    def invokeParallelOperation[T, R](stealer: Stealer[T], kernel: Kernel[T, R]): R

where `T` is specialized.
This is just an abstraction that we can feed stealers and kernels to execute parallel operations.

The `WorkstealingTreeScheduler` still remains as is, but extends the `Scheduler`.

Also, this is why I was thinking about having stealers only optionally implementing `advance`, `markStolen` and `markCompleted` methods - a `Scheduler` implementation may check if those are available and perform more efficient scheduling if they are.