revising the desugaring of cases expressions.  every data variant now
defines a _match() method that takes an object, finds the member with
the same name as the variant, and invokes that function passing it the
fields of the current value.  cases now just desugars to collecting
the branches as functions within an object and passing that object to
the scrutinee's _match() method.  This works well, is a simpler
desugaring and is faster (since it uses far fewer function calls), but
currently produces very poor error locations if, for example, there's
an arity mismatch error
Merge branch 'master' of github.com:brownplt/pyret-lang