Task dependencies are resolved relative to their parent

Previously task dependency search began at the dependent node itself. This was erroneous; consider the following task list, wherein a:b:c depends on x:y:

    a
    a:b:c => x:y
    a:b:c:x:y
    x:y

When task a:b:c is invoked, resolving the dependency on x:y relative to c will return a:b:c:x:y - this is not the correct outcome. Instead, the search must begin at a:b and continue up the tree until the root node is reached, at which point the correct x:y will be located.
Tasks are resolved recursively.

Together with 574a4a7ee8a31c39dfd8f42ac4428c18f3f012d3 this fixes #49

Assuming the following tasks:

    a:b:c => d
    a:d

Previously the resolution of a:b:c's dependency on d would have begun by searching the children of a:b and then immediately dropping back to a search of the root node, missing task a:d entirely.

A recursive search fixes this behaviour.