Refactoring AST (Work in Progress - do not merge)

The immediate goal of this is to facilitate a fix for #319. I'm also hoping that by doing some simple baby-step refactorings we can get the code into a shape where it will be easier to integrate with Gherkin 3.

Note that this PR is a work in progress, but I want to keep that work visible, and also use Travis to check the changes across all the Rubies we support.