This commit adds behavior to the preprocessor which fills a tree with defines and their replacements. In future commits, the parser will substitute instances of the defines with their replacements in the source code.