Basic test that a type implements a graph.
Template tests for whether type is a directed/undirected graph.
Rename Graph => IndexedEdgeList, make library functions generic.

  * Choice of name reflects that given to the corresponding
    graph implementation in igraph.

  * Library functions should now work with any graph satisfying
    the characteristics tested for by isGraph