!str #16069 disallows using one Keyed sink/source ambiguously (many times)

This can / should wait for Patrik's move-all-the-things PR.
Refs #16069 
Is there really a need to collect the elements just to check them? I would go with something like this.

```scala
  vertex match {
    case v: SourceVertex ⇒
      require(graph.nodes.forall(_.value match {
        case x: SourceVertex if x.source eq v.source => false
        case _ => true
      }), warningMessage(v.source))
    case v: SinkVertex ⇒
      require(graph.nodes.forall(_.value match {
        case x: SinkVertex if x.sink eq v.sink => false
        case _ => true
      }), warningMessage(v.sink))
    case _ ⇒ // ok
  }
```