1. add Edmons-Karp algorithm
2. refactor DirectedGraph, WeightedGraph, and WeightedDirectedGraph