mu-types on heap; eager unpack; effects in arrows

- mu-type definitions contain exists *L: 'x. Ref L to describe
  pointers to recursive nodes on the heap
- at unfold operation, mu-type is unrolled and the existentials,
  which appear aribtitrarily, get eagerly unpacked
- subAndPack does subtyping along with collected witnesses for
  these existential locations
- added location variables and heaps to arrows
- ECast generalized to arbitrary arrow
- changed comment syntax to (** ... **) to allow for (*L: R) in
  heap syntax
- SExp synthesizes to undefined, rather than the expression type,
  since the completion should not be treated as a return expression