Language currently create a new environment for each invocation.
This is not necessary, the function should just construct the environment when it is declared, save this environment, and then push and bind arguments on a copy of this environment when it is called.
createArgumentsBinding called in initFunction should just create placeholder bindings instead of binding the actual values.