More general types for data type branches.

The internal syntax had been converted a while ago to handle any sort of type as
a data type branch, as long as a [TyConcrete] was found somewhere. However, the
surface syntax still had a hardcoded, limited set of types for data type
branches. This commit lifts that restriction and generalizes data type branches
in the surface syntax as well.

This allows us to get rid of [FieldPermission] and [FieldValue] (finally!) which
now only appear as short-lived polymorphic variants that go from the parser to
[ParserUtils]. Interestingly enough, I had to use a few tricks in
[TransSurface], because the translation of a [TyConcrete] "as a branch" is not
done the same way as a regular [TyConcrete] "as a type".

What remains to be done is allow in the parser syntax for:

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

and then change [ParserUtils] accordingly. Copious comments in [SurfaceSyntax]
detail the invariants that the various stages of the compiler agree on for
determining what is legal is a data type branch.