Implemented copy constructors for tree classes.

Added missing copy constructors and clone() methods to various tree classes.
Added getPreviousNode() and getChildNode().

Added missing getPreviousNode() and getChildNode() methods, which allow for
looking up the previous node or first child node without changing the cursor.
Added further checking methods to cursor class.

Added methods that check whether the current node has a parent, at least one
child node, preceding or following siblings. Also added new tests for that.
Added gotoFirst() and gotoLast() methods.

Added gotoFirst() and gotoLast() methods, which allow for setting the cursor
to the first or last node on the same level (i.e. the first or last sibling).
These methods will be useful for the upcoming cloneSubTree() methods.
Minor fixes on "const" declaration of pointers.
Added cloneSubTree() method to tree classes.

Added cloneSubTree() method to the tree classes. This allows for copying a
particular subtree from an SR document tree or from another subtree. Also
added new tests for these methods.
Fixed possible memory leak.

Thanks to Peter Hille for the report and suggested patch.
Changed return type of addContentItem(node*).

Changed return type of addContentItem() method that expects a pointer to a
newly created document tree node. It now returns an OFCondition (like other
similar methods) instead of the pointer to the tree node that was passed to
it. Also fixed possible memory leaks in case adding the new tree node failed.
Reimplemented various getXXX() methods.

Reimplemented various public getXXX() methods in derived tree class, but in
the "protected" section. This also avoids some explicit type casts.
Cleaned up handling of "unknown" relationships.

Made sure that the "unknown" relationship type is only permitted on top-level
in a document subtree. This will be used for certain DICOM SR templates.