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>
It would be much more clear to rename `subset` to `incoming` and not limit to the `DEFINES`. It would be simply be to prevent exporting any incoming relationships (such as parents or foreign key references).

On second thought, not to include yet another function, but for flexibility, a filter function could be used for handling this type of logic. And where there are multiple functions.. comes a class. In principle this is not any different from something like the `json.JSONEncoder` where you can extend `default` method to support your own types.

A class-based exporter also has the advantage of extending or overriding methods which removes the need to assume falling back to the default behaviors (as in the created `id_func` returned).

I am going to put something together.