add uniqueTag and tags for all adjuncts, use them when determining duplicates

I don't like that we're exposing the class names like `WhenFunctionBuilderWhenFirst`. I can see where the name came from, but I can also imagine we'll want to rename it later. Can we mark these as `@Beta`, and same for `WhenFunctions`?