add support for (fn [& args]) destructuring

This was some what problematic to implement efficiently since the JIT
compiler can't trace through varargs.

The first is the constant arity function generators. This the JIT can
trace through. The second is the general arity function generator. This
can handle an unlimited (well whatever LuaJIT or Lua's function argument
limit is) number of arguments. So far I assume a cut off point exists
where it doesn't matter that there is a specialized function to handle
the rest args. Thankfully this point is configurable as a number.

I think Clojure chose 20, should I do the same? There is some space cost
with all the specialized functions that has to be generated as well.
fix printing of empty list
add support for rest args destructuring, uses new Function.lua additions
add support for rest args functions
use function rest arguments for list, it seems to work as a I added by the test cases