Add option to LD arguments as list

Adding the following transition to the SECD machine:

s (e1 e2 ... em . e') (LD m . c) d  -->  (em . s) e c d
where e = (e1 e2 ... em . e')
Add support for variable arguments

Examples:

   (F LAMBDA ARGS (... body ...))
   (F 1 2 3 4 5)  // ARGS = (1 2 3 4 5)

   (F LAMBDA (X Y Z . ARGS) (... body ...))
   (F 1 2 3 4 5)  // ARGS = (4 5)
Replaced (F . ARGS) syntax with (APPLY F ARGS)

(F . ARGS) may be ambiguous if ARGS is not a variable reference, but a
function call.  (F . (G X)) looks like it means "evaluate G with the
argument X, and map the elements of the resulting list to the arguments
of F".  However, the S-expression "(F . (G X))" is equivalent to
"(F G X)", so what "(F . (G X))" really means is "evaluate F with the
arguments G and X".
Make list of matched elements available to MATCH

_0 may be used in a CASE to refer to all matched items.

Example:

  (MATCH (QUOTE (a b c d)) (
    (CASE (a _ _ d) _0)))     // returns (b c)
Simplify red-black tree rebalancing