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

I'd prefer this to be called `whenEquals`, doing WhenFunctions.when(`Predicates.equalTo(test))` explicitly. I don't like that it accepts Object and then behaves differently in the constructor for whether it is a Predicate or not.