Improve performance of "Evaluate build tags as true and false" feature (#2058)

This PR provides an alternative way of implementing #1938 (i.e.
evaluating both `tag` and `!tag` as true when evaluating build
constraints).

The way it was implemented originally has exponential time complexity
with the number of provided build tags. This made gazelle unusable on
projects with a relatively large number of tags, as the run would never
end.

This implementation leverages the existing `dropNegationForIgnoredTags`
to manipulate the tag expression.

Fixes #1262 in a more efficient way than what #1938 implemented.
6 files changed