Change tracking functionality working with heirarchical table structures
Diffs shouldn't mutate the original object
Track changes to the object and their relationships