Added files needed for Digraph representation.

The files added are header files needed for the representation of
graphs: GraphNode and GraphEdge, which use templates in order to
allow a node or an edge to have its own tag. Due to this, the
digraph header file and, in the future, the graph header file use
template classes as well.

The operations a digraph can have, as of now, are: add nodes, get
a node by its index of by its tag data, erase a node by its index
or by its tag data too, add an edge from a node to a nother one,
get all edges from a node or a specific one, as well as erasing
edges, either a single one, all the ones related to a node or all
of them.