Model visualization generator

<h2> Overview </h2>

The model visualization generator feature allows to check the completeness of a data model and to produce a diagram of it:
- Metadata object parsing:
    - nodes are defined by Node objects;
    - relationships are defined by Relationship objects and couples of Adjacency objects.
- Output formatting: Dot code format implementation done and tested.

<h4> How to use </h4>

    python:
    > visualizer = GraphvizVisualizationGenerator(myMetadata)
    > visualizer.set_output_path('/tmp/viz.dot') \
                     .set_graph_title('Data model diagram') \
                     .run() \
                     .write_output()
    
  Then:

    shell:
    $ dot -Tjpg /tmp/viz.dot -o /tmp/viz.jpeg
    $ eog /tmp/viz.jpg

    or 
    
    python:
    >from subprocess import call
    > call(["dot", "-Tjpg", "/tmp/viz.dot",
              "-o", "/tmp/viz.jpg"])
    > call(["eog", "/tmp/viz.jpg"])

<h2> Content </h2>

- VisualizationGenerator: abstract class implementing non-output-language-dependent methods only.
- GraphvizVisualizationGenerator: Implements output formatting methods for dot code generation.
- configuration:
    - color_settings: a list of Graphviz colors (see: Configuration)
    - dot_template: a Graphviz template optimized for dot generation (see: How to use)
- TestGraphvizVisualizationGenerator: Testcase on title, node and relationships specifications.

<h2> Graphviz visualization Configuration </h2>

A configuration folder is located in graphviz/blueprints/model_visualization.
It contains 2 configuration files:

<h4> Template </h4>

Graphviz digraph template:
- Sets Graph style
- Is appended with:
    - title;
    - node specifications;
    - relationship specifications.

<h4> Colors </h4>

To color the nodes, one can either create a customed configuration or use the default color list.

A customed configuration could be:
- A list: The final visualization will color nodes using those colors only. Order is not respected.
- A dictionary, with node names as keys and colors as values: this allows to keep a colour code.