A new switch variant that dispatches based on look-ahead symbol.

    type A = unit { [...] }
    type B = unit { [...] }
    type C = unit { [...] }

    type test = unit {
        [...]
        switch {
            a: A;
            b: B;
            c: C;
        };
        [...]
    };

This figures out automatically whether to parse an A, B, or C.

One can specify a default case as well with the usual "* ->" syntax;
however, typically one can also just list a case that's a catch-all by
itself; e.g., a bytes field will act as the default automatically (but
obviously you can't have more than one of these).
When multiple exception handlers are defined in HILTI, choose the most
specific one.
Support for manual backtracking in a BinPAC++ grammar.

If a field is marked with &try, a later call to self.backtrack()
anywhere down in the parse tree will return to that position and
continue there.

Example:

    export type test = unit {
        a: bytes &length=4;
        foo: Foo &try;
        bar: Bar;
        b: bytes &length=6;

        on %done { print self; }
    };

    type Foo = unit {
        a: int8 { print "Foo.a", self; }
        b: int8 { print "Backtracking"; self.backtrack(); }
        c: int8 { print "Foo.c", self; }
    };

    type Bar = unit {
        a: int8 { print "Bar.a", self; }
        b: int8 { print "Bar.b", self; }
        c: int8 { print "Bar.c", self; }
    };

    # printf '1234\001\002\003567890' | pac-driver backtrack.pac2
    Foo.a <a=1, b=(not set), c=(not set)>
    Backtracking
    Bar.a <a=1, b=(not set), c=(not set)>
    Bar.b <a=1, b=2, c=(not set)>
    Bar.c <a=1, b=2, c=3>
    <a=1234, foo=(Null), bar=<a=1, b=2, c=3>, b=567890>