Added proper destruction of InputNodes,OutpuNodes and GroupNodes.

The InputNodes and OutputNodes are special. Simply having the base
Node class do the destruction only removes the input and output plugs
on the InputNode and OutputNode, but it doesn't remove itself from the
cached pointers in the _input_nodes and _output_nodes member of the
GroupNode class. Deleting InputNodes and OutputNodes should properly
clean up these references in the _input_nodes and _output_nodes member
of the derived InputNodes and OutputNodes class, and also the _input_plugs
and _output_plugs members of the base Node classes. Hence the constructor
has been modified.  Note that removing or deleting the input and output plugs
off of the InputNode and OutputNodes is not currently handled, as this code
path won't update the cached pointers to the plugs and input and output nodes
in the group node.  We should probably override those methods on the InputNode
and OutputNode so that these plugs cannot be removed.

This was leading to a segfault on exit.

The factories used to just have one method for creating input and output plugs.
There is now two of each.
create_input_node_input_plug and create_output_node_output_plug are the new
methods.  These handle the special logic for these special plugs that live
in the GeoLoader of grand parent group of the node.