Allow data specifications in concrete syntax, but don't do anything with them yet

Parser will accept data specifications before combinators:

data List = Cons x xs | Nil;
data Pair = Pair a b;
data Point = Point x y z;

Currently, they're just being thrown away. Eventually, we'll transform these
into equivalent super-combinators that use Pack{tag, arity}, but we'll let the
compiler keep track of the tags.

Cons = Pack{3, 2};
Nil = Pack{4, 0};
Pair = Pack{5, 2};
Point = Pack{6, 3};

We'll also be changing case-expressions to allow:

length ls = case ls of
    Cons x xs -> 1 + length xs;
    Nil       -> 0;

Which will be transformed into:

length ls = case ls of
    <3> x xs -> 1 + length xs;
    <4>      -> 0;