interpreter code cleanup
    + DefineStmt -> AssignStmt
    + change all value functions to just assume certain list sizes, does ML just give a warning for not covering the empty list case?
        right just get a warning
    X parametric astnode datatype instead of real?  Don't think we can actually
    do this because the envtype needs to instantiate a dvector type for its
    dictionary.  Have to have all of the same dvector types in the same
    dictionary.
    + rename iterdict in environment.sml to pdict.  Want to have integer
    parameters such as N or numwaves in this dictionary as well.
Created ParForLoop AST node and changed parameter and iterator lookup in environment to lookup and venvupdate consistently.  v because will have a VarExp in expression grammar.
remove initialization statements and instead have a way to initialize the environment,
need this so we can introduce index array accesses
    Already have ienvupdate and denvupdate so this is easy.
    Can also set parameters like N with venvupdate.
    Only need those values in the environment for interpretation.
    When we generate code, the code will assume those variables
    are defined.
Started the expression AST nodes and their evaluation.  Enough to do f(i) or i as a read or write expression.
Read and write accesses to data arrays now in terms for sat expressions.