In scheduler_start(), do not reset the tasks' tic and toc or task debugging properties (see #611 (closed)).
Make each cell that hosts a task carry a flag saying it has a task (see discussion in #523 (closed)).
When unskipping, only recurse down to levels where tasks still exist (see discussion in #523 (closed)).
When unskipping, duplicate the list of active cells in order to launch the threads not just on the cells but also on the different task types to enhance parallelization
Move all the unskip logic to a separate file (part of #427 (closed)).
Since we know at which level the tasks are, we can recurse less in the creation of send/recv tasks and use a lot fewer task links.