Prototype of FlowGraph

Early prototype for discussing the way forward.
Before we start with the DSL sugar I would like that we express the functionality in terms of something similar to the raw `addEdge` methods.
At least in the Scala DSL we can also express it like this:

    g = Graph { b =>
       b.addEdge(in1, f1, merge3).
       b.addEdge(in2, f2, merge3).
       b.addEdge(merge3, f3, bcast3).
       b.addEdge(bcast3, f4, out1).
       b.addEdge(bcast3, f5, out2)
    }
    g.run(materializer)

The above isolates the scope of the builder to the function that Graph.apply() accepts, and it makes the build() step implicit. Obviously, this will not work for Java.