Move core nodes and edges API to separate module

The API is now scoped, i.e. nodes.add vs. add_node

Signed-off-by: Byron Ruth <b@devel.io>
Add metrics logger for Neo4j transaction times

Signed-off-by: Byron Ruth <b@devel.io>
Rename `change` to `set` for nodes and edges

*Change* implies something did change, but a set may result in nothing
changed. The default behavior is to perform a diff between the previous
and current attributes and if something changed to add a new revision.
Otherwise nothing occurs, however `force` can be set to true to
always create a new revision.

Signed-off-by: Byron Ruth <b@devel.io>
Remove used import

Signed-off-by: Byron Ruth <b@devel.io>
Update edge operations to create native edge

The native edge between the start and end nodes is now created when an
edge is added. Likewise the native edge is deleted when the edge is
removed. Therefore the native edges represents current state of
the graph.

This feature is added to support the native structure of the graph.
This combined with the ability to set node labels and the property
packing make it possible to execute raw queries as one would expect.

Signed-off-by: Byron Ruth <b@devel.io>
Add methods on Node and Edge models

This provides a cleaner implementation removing disparate functions.

Signed-off-by: Byron Ruth <b@devel.io>
Add more tests for core API

Signed-off-by: Byron Ruth <b@devel.io>