Finer grained saving/dirty

Support for determining if a parents children (and grandchildren, etc) are dirty
or not.

Support for saving all changed objects in a family tree, even if
intermediary members aren't changed.

For example A -> B -> C, if C is changed but B is not, C can still
get saved