Adding DiGraph class to SmartNet
Adding classes and fixing some issues

Classes:
- DiGraph: For the usage of directed graph in SmartNet
- DiEdge: Represents the existence of a relation between Source -> Target

Besides:
Adding indexer declaration to interface IEdge
Changing string message for edges not found in Graph class
Filling remaining methods in DiEdge and Digraph classes

Also fixing minor details in constructors of Edge after adding more constructors
Adding constructor for DiEdge class

Changing IEdge interface:
IEdge<TVertex> -> IEdge<TEdge, TVertex>
and updating the rest of the code to match this change
Adding TData parameter for IEdge interface

This change implies a lot of rewriting in other interfaces (classes)
implementing IEdge (TEdge : IEdge).
Adding simple classes for handling common cases of graph interactions

Classes:
- SGraph<TVertex> for creating a Graph<TVertex, SEdge<TVertex>, Data>
- SDiGraph<TVertex> for creating a DiGraph<TVertex, SDiEdge<TVertex>, Data>

These classes use the following auxiliary classes:
- SEdge<TVertex> for creating an Edge<TVertex, Data>
- SDiEdge<TVertex> for creating an DiEdge<TVertex, Data>
Fixing changes in UnitTest project to match the last changes in SmartNet