Implement scheduling delayed tasks

The task scheduler has to be able to delay tasks to run at the specified
time in the future. Implement this method.
Pass tasks by reference

The tasks that are scheduled are owned by another class, not the task
scheduler. The scheduler is only allow to execute the task, hence he
needs to modify the actual implementor of the task interface. So tasks
have to be passed by reference, rather than being copied.