Task Update

veering from the pseudocode a little, Tasks now know their parents (this
saves some complexity when referencing children, but means the program
is a bit more 'entangled')

program will generally be more efficent now, some areas being reduced
from O(n) to O(1)