Add option to provide a predicate for each case

Example:

    (F LAMBDA (X)
      (MATCH X (LIST
        (LIST (QUOTE (_ x _)) (LAMBDA (A B) (LEQ A B))
          (LAMBDA (A B) (ADD A B)))
        (LIST (QUOTE (_ x _))
          (LAMBDA (A B) (SUB A B))))))

    (F (QUOTE (1 x 2)) ; Returns 3
    (F (QUOTE (2 x 1)) ; Returns 1