Extend the syntax of data type branches.

We now allow:

  data t =
  | (self: A { ... })

where ... can refer to the "self" variable. This desugars to a branch which has
the form

  { self: term } (=self | self @ A { ... })

This causes problems for the type-checker since it does not expect data type
branches to be of the form (=x | x @ t).