changed environments to use refernces, added letrec and named let, NOTE: there is an unusual bug in the global references