Adding Generic and Non Generic versions.

Tree, Branch are simply aliases to the TreeNode. It is used to make your
code must easier to read. All TreeNodes must have a unique identifier.
These classes have reference feedback protection and will merge/remove Nodes that have the same Identifier or the same reference.

The generic versions of these classes simply allow you to attach your own
data to each node using the Data field. eg TreeNode<T>.Data. You can mix
generic trees with non generic ones. However, you will need to use the
IsGenericClass propery before accessing the Data Field. Other wise this
will create exceptions. All Generics are subclasses of there non generic
counter parts.