Error types and desugaring catch blocks

We defined types for Pyret errors in error.arr, and use tags from
runtime.rkt, along with a wrapper in error.arr, to produce the
correct error structures as seen by Pyrete except blocks.

- There is a too-clever desugaring of catch blocks to avoid shadowing
  the variable used as the exception:

  try: ... except(e): ... end

  becomes

  try: ... except(e): \e: (...)(error.make-error(e)) end

  which carefully avoids shadowing the e.

- Along with this too-clever desugaring comes a hack in desugar, which
  checks for this pattern on a catch block to avoid re-desugaring and
  adding additional calls.  This is a problem because desugar is re-entrant
  for convenience in other places, and perhaps should not be.
Merge branch 'master' of github.com:brownplt/pyret-lang