neo4j: Introduce an API for graphs

You have waited for it. Now it comes: the Neo4j graph API.

## Features

* Customizable identification scheme: You have power on how IDs are generated and which property is used to store it. For the moment, only one scheme is provided: sequential IDs.
* Customizable storage mechanism: You have power on where and how your graph is saved. You can then reload your graph at will. For the moment, to storage medium are provided: Neo4j and JSON.
* Partial loading and saving: For when you do not want put all your eggs in one basket.
* Progression tracking: You can track the progression of a long-running operation (like saving thousand of nodes in a Neo4j database) and display it to your users the way you want.

## What is included

### The API itself
* progression: Add an API for progression tracking.
* neo4j: Add an API for graphs.
* neo4j/graph: Add node removal methods.
* neo4j/graph: Add optimization methods.

### Neo4j as a storage mechanism
* neo4j/graph: Add Neo4j as a storage mechanism.

### JSON storage mechanism
* json: Factorize the trivial implementation of `to_json`.
* stream: Optimize `StringIStream.read_all`
* neo4j/graph: Add a JSON storage mechanism.
* neo4j/graph: Enlarge in advance when loading from JSON.

### Sequential identification scheme
* neo4j/graph: Add a sequential identification scheme.
* neo4j/graph: Optimize some services of `SequentialNodeCollection`.
* neo4j/graph: Implement optimization services of `SequentialNodeCollection`.

### Garbage collection :smile:
* neo4j: Remove `json_store`.

## Comming soon in a future PR near you
* Refactoring of `/src/neo.nit` and of `neo_doxygen` to use the new API.

Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>