Add support for macros to Lispkit Lisp

In the definitions for a (LET ...) or (LETREC ...) block, one can
include MACRO definitions.  They have the same syntax as LAMBDA
definitions except with the keyword MACRO in place of LAMBDA.
Macro definitions do not get compiled.
References to macros are processed at compile time, rather than at
run-time:  The macro call is replaced with the body from the macro
definition, with its arguments substituted with the provided
S-expressions.

Example:

  (LET
    (F (TEST (1 2 3) 4 5))
    (TEST MACRO (X Y Z)
      (LIST (QUOTE X) (CONS Y Z))))

  While compiling the above, "(TEST (1 2 3) 4 5)" would be replaced by
  "(LIST (QUOTE (1 2 3)) (CONS 4 5))".  Compilation would then continue
  as if the code had been written as:

  (LET
    (F (LIST (QUOTE (1 2 3)) (CONS 4 5))))

Note that, if TEST had been a LAMBDA definition, "(TEST (1 2 3) 4 5)"
would be illegal, since "(1 2 3)" would be interpreted as a call to the
function "1".  Because it is a MACRO, however, "(QUOTE (1 2 3))" is
substituted for "(1 2 3)" proceeding with compilation.
Add CASE macros to make (MATCH) statements nicer

- Simplify MATCH so that all cases must include a predicate
- Add CASE macros to make working with MATCH easier.

  For example, instead of:

    (MATCH X (LIST
      (LIST (QUOTE (_ + _)) (LAMBDA (A B) (QUOTE T)) (LAMBDA (A B) (ADD
      A B)))
      ...))

  we can now write:

    (MATCH X (LIST
      (CASE* (A B) (_ + _) (ADD A B))
      ...))

  or:

    (MATCH X (LIST
      (CASE (_ + _) (ADD _1 _2))
      ...))

  The CASE and CASE* macros will include the predicate
  (LAMBDA (...) (QUOTE T)).

  If we want to use a predicate (e.g, say we require A ≤ B), instead of:

    (MATCH X (LIST
      (LIST (QUOTE (_ + _)) (LAMBDA (A B) (LEQ A B)) (LAMBDA (A B) (ADD
      A B)))
      ...))

  we write:

    (MATCH X (LIST
      (CASE*? (A B) (_ + _) (LEQ A B) (ADD A B))
      ...))

  or:

    (MATCH X (LIST
      (CASE? (_ + _) (LEQ _1 _2) (ADD _1 _2))
      ...))