Implement tag limits

Hey @tom025, had some time and energy last night so I gave this a go. Would love to collaborate on polishing it up since our pairing schedules don't easily line-up.

Notes:
* I moved the tag limit logic to the front end as per https://github.com/cucumber/cucumber-ruby-core/issues/53, but left the other filters in core. I *think* this makes sense for now as they seem more core to me.
* I did *not* remove the limit code introduced in https://github.com/cucumber/cucumber-ruby-core/pull/51, but obviously borrowed heavily from it. If this path works out it'll have to be removed.
* I left the dependency on ```::Gherkin::TagExpression```; it does the job, and I reduced the dependency to the hash which maps tag names to limits so swapping out another parser is trivial.

Would love to get general feedback / suggestions.

A couple specific things I floundered on:
* Not sure whether the ```TagLimits``` module belongs within ```Cucumber::Runtime``` but wasn't sure where else to put it.
* Not sure about the name ```GatedReceiver```
* I *think* the order of the filters might need to change based depending on the desired behavior, but I'm not sure.

https://github.com/cucumber/cucumber-ruby-core/issues/54