tree-diff: consolidate code for emitting diffs and recursion in one place