This class provides a way to merge two trees. A merge is defined as taking a
tree and muting this tree (firing events) to cause the tree to be the same
as the target tree. This allows the original tree to retain nodes which have
not been changed. A change is defined as having both the same syntax and
semantics. The current tree model preserves spacing where appropriate, so
this requires comparing spacing as well as semantics.