Add slot in typeinfo for callback to be used when removing a node from graph

The main purpose of this is so that we can replace ID nodes with ID Groups
by removing the old ID nodes and merging their contents into a new group
node.

As a result, shuffled about the order of callbacks a little in typeinfo
Abstract out standard part of IDDepsNode and GroupDepsNode into a separate type

This makes it easier to tell whether they've been defined correctly,
and/or gives us a legitimate type (OuterIdDepsNodeTemplate) to use when
dealing with a node which we know is either one (and the exact difference
doesn't matter).
Code reshuffling for core/general node management routines
More code reshuffling - moving around prototypes (and argument definition lists)
DEG_group_cyclic_nodes() -> DEG_group_cyclic_node_pair()

This renaming change makes it clearer what exactly the function does.
That is, instead of being the "global" entrypoint for all cyclic node
grouping operations, this only performs grouping for a single pair of
cyclic nodes...
Improve comment for nti->match_outer() callback
Skeleton of node copying operation

* Added an API method for copying a node (and its little subgraph)
* TODO: The handling of in/out links needs to be resolved...
Added default handling for relationships on copied nodes

For now, resolution is to clear lists of links when doing base-node copy
(as we have no/little knowledge of what to do with regards to how this
links in with rest of tree).

However, callers of this node should know a bit more
(i.e. when copying node's subtree, at least level n-1 knows
how to solve the links between nodes at level n, though we still have
problems with links which stray to other nodes outside this one...