begin implement type checks in multiplication_expr 
and assignment_expr
remove unused helper functions
create new scope in function_def
cast code to string before +
remove extra print statements
_param_list: add symbols to symbol table
isGlobal flag in symbol/scope table helpers.
set isGlobal=True when adding function_def ID
to symbol/scope table
_symbol_exists additionally checks if symbol is 
in the global scope
tree walk comments
_symbol_exists fix for global scope
fix assignment_expr type bug
function_def: add function name to symbol table
_expression: add symbol to symbol/scope table
function_def raise exception if function already defined
external_declaration: add to scope/symbol table
and put any external declarations in generated python code... 
any reason why weren't we doing this before?
primary_expr: check if ID has been defined for use
OperatorCannotBeApplied exception
primary_expr : returns "undefined" as _type if
variable not previously defined
UnexpectedSymbolError
InvalidArguments expection