Merge all subsequent passes into one.

The basic structure of this change is that each pass is now
expressed as a "recorder", one of which can be active at any
particular time. The recorder is responsible for marking a begin
point of tokens to compress and then once it is done consuming
tokens, returning a new list of compressed tokens at that point.
Merge pull request #9 from smspillaz/cmake-ast.item_9

Merge all subsequent passes into one.