!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 
Example of the problem with overriding equals:

```scala
myVertex == node // myVertex.equals(node) == true, because our smart equals impl.
node == myVertex // node.equals(myVertex) == false
```
contains() seems to use the latter, so we couldn't use contains(vertex) anyway. I can imagine this being very confusing in anyway.