Edmonds-Karp algorithm for maximum flow

Here's an implementation of Edmonds-Karp algorithm for finding maximum flow in a directed graph. In the same way as [the implementation from BGL](http://www.boost.org/doc/libs/1_53_0/libs/graph/doc/edmonds_karp_max_flow.html) it requires that the graph already contains a reverse edge for each primary edge and the capacities of reverse edges are zero.

I had to turn `EdgeWeightsMap` into more generic `EdgePropertiesMap`. Besides, now it's covered with tests.

@monora, please review and merge if it looks good to you.