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
Alternative can be:
    
    Graph { g =>
      g(responseSubscriber) ~> responseFlowBeforeMerge ~> merge ~> responseFlowAfterMerge
      ....
    }

In other words make the build step implicit (will be done at the end of the enclosing scope) and the builder confined to the scope of the graph building code. Less viable for Java though.