1. Site contacts and work order contacts now get set on create and write
of all FSM project tasks. If the task has no parent_id, it will try
to set them from the sale order if it has one. Otherwise, they are
simply inherited from the parent.
2. Changing the site or work order contact on a task no longer feeds
back to the sale order.
3. Changing the site or work order contacts on a parent task propagates
the change to its subtasks.
Fixes a problem where the propagate assignment checkbox on project
tasks was not effectively propagating task assignment to descendants.
Also added some intelligence around checking / unchecking the box such
that the setting change propagates to children. This allows for
interesting configurations for assignment propagation, such as limiting
propagation only to one level or only starting it at a given level of
subtasks.