Added Edge type

* Added Edge type
* Adjacency lists contain Edges, not just target
* Added Spire to constrain edge weights to Ring
    * More generic path cost computation

TODO: Implement graph creation/add edges to cover the possibilities of
{ undirected, directed } x { unweighted, weighted }