runner: add a missing contract

Signed-off-by: Jan Dvořák <mordae@anilinux.org>
scheduler: use user-specified ids to track tasks

New tasks replace old tasks with same identifier and cancellation is
done using these identifier as well.

Signed-off-by: Jan Dvořák <mordae@anilinux.org>
scheduler: drop the "immutable" variant

It have been mutated on every `sync` call anyway.
Plus merge the queue into the main object again.

Signed-off-by: Jan Dvořák <mordae@anilinux.org>
scheduler: added scheduler-has-task?

It's useful to know whether a task have already been scheduled or not.

Signed-off-by: Jan Dvořák <mordae@anilinux.org>
scheduler: do not keep leftover ids

Signed-off-by: Jan Dvořák <mordae@anilinux.org>
implemented feeder

Signed-off-by: Jan Dvořák <mordae@anilinux.org>