this is state before attempt to fix Abstraction types to just be the type of the input variable and body type must be determined
Have not tested much yet, but it compiles. This second version has improved typing for abstractions, type-checking for abstractions, uses contexts to keep track of variable types, and allows for user-defined variables. Code has not been cleaned and is not yet complete, so examine at your own risk. No lifeguard on duty.