Given a connection, this method calculates whether the connecting line should divert around
the left or right of the destination component, or just go straight to the top of it.
This method calculates the bounding boxes for all nodes in the task structure diagram
with the root task being the task with the supplied ID, to the specified depth.
This method ensures that the supplied project name isn't the empty string, and
doesn't contain any characters that cannot be used in a directory name, ie:
\ / : * ? " | < >