Implement Graph, Digraph and WeightedGraph for directed weighted graphs

As well as `add-edges'` so the `weighted-digraph` constructor could be
used.