SERVER-11692 step 1: VariablesParseState plumbing

VariablesParseState isn't yet used, this just pushes it through the parsing so that it can be used
in future commits.
SERVER-11692 step 2: use VariablesParseState at parse time

Now we are assigning Ids but still using names to get/set variables at run time.  The main
functional change at this point is that we now error at parse time rather than run time if a user
accesses an undefined variable.
SERVER-11692 step 3: Pass Variables as pointer rather than const ref.

This is just changing the function signatures and callers, not how Variables is used.
SERVER-11692 step 4: Use Variables::Id to get/set Values

This is what the past 3 commits have been building up to. Variable names are now "compiled away" and
are not used at run-time.