Fix a bug in multilevel pattern matching
Fix a bug in multilevel pattern matching

This bug is a testament to the power of symmetry; before this fix,
the type of "matches" wasn't quite analogous to the type of "match"
(it was missing some expressive power).  The fact that I hadn't needed
this expressive power was a bug, and after fixing it the types are
now exactly analogous.

Concretely, the bug was an implicit assumption that once we're to
one alternative the next constructor has arity equal to all remaining
patterns to match.  This caused cases of the form
    | [] : l -> ...
to be turned into invalid arity patterns like
    | [] l -> ...
([] applied to one argument).

girving/duck,girving/duck