=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.
I think it will be very uncommon with these kind of parallel edges, so I don't see the need for caching or optimizing, but using a max key in the builder is pretty nice, unless we want to use the qualifier as an add-order index for some reason.