add interface and struct to abstract tree layout process
abstract current layout algorithm to an ITreeLayout implementation
fix VisualTreeNode to use struct constructor
rename layout suspension methods to avoid confusion

calling does not trigger redrawing!
add small helper class for tree traversal
fix two small typos in CompactTreeLayout
VisualTreeNode must be a class, not a struct

Otherwise ITreeLayout.Layout() is pass-by-value and thus
changes to the coordinates are not visible to the caller.
TGC: abstract layout to use ITreeLayout
remove now obsolete DisplayGrid
update GTC to use new methods
TGC: add null checks since VisualTreeNode is no longer a struct
CompactTreeLayout: cleanup immediately after layout
remove debug code
TGC: add new BuchheimTreeLayout class and use it by default

Credits:
	* billmill.org/pymag-trees/
	* C. Buchheim, M. J Unger, and S. Leipert. Improving Walker's algorithm to run in linear time. In Proc. Graph Drawing (GD), 2002
Merge branch 'tree-layout'