Use policy-based design for scheduler

This patch separates interface and implementation of scheduling coordinator and
worker. The implementation is now outsourced into two policies: a steal policy
and a (de)queue policy. The previously hardwired implementation is split into
the two policy classes `iterative_stealing` and `fork_join`.