!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 
I would go further, and add the check to `checkAddSourceSinkPrecondition` and `checkAddOrReplaceSourceSinkPrecondition`, i.e. they are checked immediately when an edge is added to the graph. I see no reason to do it afterwards, and checking when adding gives better stack traces (and it's a cheap `graph.contains` call).