Complete implementation of let, let*, letrec