Reimplement serializer to use a stack rather than recursion

This prevents reaching the maximum recursion depth error for large
graphs.
Change example to more informative

In addition, the example was broken since nodes were related to office
rather than the other way around. The serializer is unidirectional and
thus serializing on the office would not find the people nodes.
Change default format of serializer output to be array-based
Refactor Neo4j parser and loader and update to support array-based formats

In addition, this can now be used as a script, e.g:

python -m 'graphlib.neo4j' [path/to/file.json] [--load] [uri]

If no path is provided, stdin will be read. If the `--load` flag is present,
it will execute the statements in Neo4j at the default URI unless a URI
is passed. Otherwise statements will be printed to stdout.