Loading
Split out VariableDeclarationGenerator from ExpressionGenerator.
This refactor reduces the coupling between variable declaration and expression generation. Instead, each generation system can choose how to deal with these problems separately.