Implement graph export method on Node

An export method is added on the Node class which returns a json object
that represents the graph of the node instance and its definitions,
recursively. The return value is as speficified in issue #38 with a
format version number, the id of the top-level node, and dicts of nodes
and relationships, each with an arbitrary but consistent id, a type, and
a dict of properties. To support this method, __eq__ and __ne__ methods
are added to the Node and Rel classes and a get_map_id utility method is
added (in utils) that iterates over {`id`: `obj`, ...} type dicts and
returns the id of the passed object or a new, unclaimed id and a boolean
representing whether or not the id is new as a two-dict.

Fixes #38
Fixes #54

Signed-off-by: Aaron Browne <aaron0browne@gmail.com>
I am unclear what the utility of creating arbitrary IDs for objects are since they are not based on anything derived from the object itself. This method is not reliable for subsequent exports since the ID could different simply due to a change in order of the components.

The ID need to be a natural identifier such as `self.uri` which is reliable on subsequent exports even if any of properties change (except for the identifier itself of course). Using `self.uri` would remove the need to create these maps and the comparison functions on the Node and Rel classes.