Multi-argument functions

The last step in this laboratory is to allow functions of multiple arguments. 

Extend the fun language feature so that functions can accept a list of zero or more arguments instead of just one. All arguments to the function must evaluate with the same deferred substitutions. An example of a multi-argument fun:

{{fun {x y} {* x y}} 2 3}


This evaluates to 6.

You will need to extend your test suite to include functions of multiple arguments.