I think that `Gherkin::TagExpression` has too many responsibilities. As far as I can tell it

  1) Parses raw tag expressions into a collection representing a boolean expression

  2) Evaluates the expression for tags passed in. (Used for deciding if a test case should be run or not)

  3) Parses raw tag expressions into a list of tag names with limits. (Used for enforcing limits).

I think the tags with limits are a separate concern from evaluating a boolean expression and we should not mix those concepts, even if we are parsing the filter expressions twice.

It looks like we want to use bool for the evaluation of boolean expressions anyway so we may want to deprecate `Gherkin::TagExpression` all together as it is not used in cucumber anymore and only used in one place for cucumber-ruby-core.