PrintObject now prints the DistToStack.
Removed unnecessary passing of expected distances to the Root object.
Merged DistDetachedFroms and DistToRootEffectedFroms into a single class DistCalculatorParameters.
Re-ordered DistToRootCalculator.Calculate method.  Before trying to factor bits out.
Renamed CollectStartingObjects.
Factored out a common method from UpdateEmbeddedObjectTosUnattached in both ArrayCommonObject and Object.
More common embedded method factoring outoring.
Removed CollectPointedToToBeKilled as it was unused.
Even more common embedded object factorising.
Renamed UpdateTosDetached to UpdateTosDetachedIfDetachedTosUpdated for clarity.
UpdateTosDistToRoot no longer calls UnattachDistToRoot (which incorrecly had a side effect of updating every to pointer recursively) and calls SetDistToRoot(UNATTACHED_DIST_TO_ROOT) instead.  This is a significant change even though it's only one line.
Added Unattached helper methods.
Added lots of comments so I can continue (and re-write everything) tomorrow.
Added a NotImplemented method to Unknown.
SetDistToRootAndSetPointedTosExpectedDistToRoot no longer sets the dist to root.  Made SetDistToRoot return TRUE on root dist change.  Removed ClearDistToRoot.
Objects added to DistToRoot calculator and checked for cyclic dependencies before addition.  There is still a bug in CanFindRootThroughValidPath or IsDistToRootValid.  Touched objects are added to an array on DistCalculatorParameters.
Setting clean commit point.
Clear temporary dist calculation flags on all touched objects in touched array after calculation.
Removed everything to do with Unattached dist calculation.  It was brain fart - should use Detached instead.
Array helper method to remove objects without affecting heap froms.