=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.
and @bantonsson regarding your question: it's possible to lookup one of the vertices and check incoming/outgoing, but that would be more costly than optimistically adding