Try to refactor interface to flow algorithms for connectivity and cuts.

This is a first try on how to refactor the interface to flow algorithms for playing nice with the flow based connectivity and cut algorithms. The changes are:

1. Each maximum flow implementation is now in its own file in the flow directory. Each implementation provides at least 3 functions: `name_impl_value`, `name_impl_flow` and `name_impl_residual`. They return the value of the maximum flow, the flow dict, and the residual network. For backwards compatibility ther is a function `name_impl` that returns a tuple with the flow value and the flow dict.

2. The functions max_flow and min_cut accept now a parameter for the maximum flow value function to use, with a global default configuration. This is the same approach taken in #1095 for connectivity and cuts functions.

I think that having access to the residual network can be useful in general and not only for internal use, at least for a fraction of NetworkX users. Maybe we should set up the flow package as the bipartite package, in which only a few functions are imported in the global namespace and if the user wants to access to all its functionality they have to explicitly import it.

See #1096 and #1095 for discussion.
Add a parameter for the residual network function in cut functions.

Also applies cut algorithms tests to all maximum flow implementations available (ford_fulkerson and preflow_push).
Adapt connectivity functions and tests to the refactoring of flow interface.