Network::duplicate() bugfix

Not all attributes were being copied, but the biggest problem is that some
pointers were being copied, rather than the values.
Network::delete_node() bugfix

delete_node() wasn't cleaning up the nodes edges
Network::duplicate() bugfix

Edges were not being properly copied to the cloned network
Refactored destructors, added some documentation

In an effort to be more consistent, default node and edge destructors now only
destroy the node and edge (respectively) objects.  This does not clean up all
of the pointers to those objects that other edges and nodes may have.  Users
generally will want to use the smarter, more methodical delete_node() and
delete_edge() alternate destructors.