Adds a shallow shim of the Graph DSL

* has two different graph builders
* adds tests of what compiles and what not
* writes HttpPipeline with both graph builders

Fixes #15767
an alternative for merge and broadcast might be:

    val g = VertexBuilder()
      .merge(f1, f5).into(f2)
      .broadcast(f2).to(f3, f4)
      .broadcast(f4).to(f5, f6)