add EXPRESSION-CASE; simplify expression processing

* EXPRESSION-CASE is a bit like CL:TYPECASE but clauses correspond to
  Esrap expression constructors. EXPRESSION-CASE ensures that all
  expression constructors are handled (unless there is a
  catch-all-clause) and that processed expressions are valid.

* INVALID-EXPRESSION-ERROR is a new error condition which is signaled
  when an invalid expression is encountered.

* CHARACTER-RANGE is a new type which simplifies validation of
  CHARACTER-RANGES expressions.

* *EXPRESSION-KINDS* is a new global variable which stores all
   available expression constructors and the corresponding types.

* VALIDATE-EXPRESSION did not handle CHARACTER-RANGES. This is now
  fixed (in CHECK-EXPRESSION) and similar bugs cannot occur because of
  EXPRESSION-CASE. Unused functions VALIDATE-EXPRESSION and
  VALIDATE-CHARACTER-RANGE have been removed.

* In addition, use EXPRESSION-CASE in %EXPRESSION-DEPENDENCIES,
  %EXPRESSION-DIRECT-DEPENDENCIES, EVAL-EXPRESSION and
  COMPILE-EXPRESSION

* New tests: DEFRULE.CHECK-EXPRESSION, PARSE.STRING and
  PARSE.CASE-INSENSITIVE