Depth first critical path annotation

The depth first critical path annotation works as follow:

* Current vertex is set to start vertex
* If the current vertex is a split, then push it on the splits stack
* If the next self edge is non-blocking, continue to explore in this direction
* Otherwise, rewind to the top-stack split vertex and continue with the alternate path

The stop condition assumes there are no outgoing edges at the end of the
observed actor.

This algorithm will not work properly in the case of self-wait in sub-tasks,
like nanosleep.  Again, it assumes there is always an alternate path without
blocking, unless it's the root task (in that case, the split stack is empty and
the algorithm continue with the only remaining path).