=str #15844 Use key labeled edges to support multiple edges between same vertices

@rkuhn @drewhk The whole purpose of [key-labeled](http://www.scala-graph.org/guides/core-initializing.html) edges is this, of course. Sorry that I didn't realize immediately.

When using `LkDiEdge` the edge label (equals/hashCode) will part of the edge identity.
a counter for whole builder would not get rid of the tailrec, because you can start building from an non-empty graph, and then we would have to pass this counter around as well, and then it is a mess