Handle syntax for exceptions better.

Following the sketch in the e-mail I sent with subject line “syntax
for exceptions etc”.  Roughly, an implementation of the grammar:

  E ::= "raise" Exn | ... ;
  Exn ::= "Bind" | "Div" | "IntError" <IntT> ;

and being able to thus write

  raise IntError 6

as well as

  f x handle e => case e of
                      Div => raise Div
                    | Bind => 10
                    | IntError(i) => i + 1

both of which are tested for.