Stick Node and Edges into DataObject hierarchy, and make node_factory only take keyword arguments: lesson learned when trying to derive/extend Node in Supertramp