regression on old patmat -- warning on new patmat
TODO note: stricter unapply type list

when an unapply returns Option[T] where T is some ProductN, does that mean the unapply
returns 1 result, i.e., that T, or did it mean to return N results?
to disambiguate, falling back to stricter spec-adherence, which requires T be exactly TupleN for N results

for now, allow extractor result to be any product, not just tuple
label-based translation of matches
tailcalls support for jumpy vpm
specialize symbols for labeldef params
typer synths Function impl for selector-less match

typedMatchAnonFun notes:

need to duplicate cases in  before typing them or symbols get all messed up
also, need deskolemize GADT skolems

fixerUpper nests the top-level definitions generated in the match under context.owner,
since we use the same translator (created using MatchTranslator(this)) for translating apply's and isDefinedAt's match,
we have to re-jig the owner-structure
(we can't create a MatchTranslater for each method individually, unless we set up their whole owner-structure first)

in patmatvirt:
- simplified default case gen (no need for a Casegen instance)
- using CASE | SYNTHETIC to detect generated matches (for switches) and avoid typing them endlessly
  more uniform, and necessary for new-style anon Function class instance gen for matches
test case for the bane of my existence
fix half of my existential troubles

no need for the clunky repackExistential
pack the type of each case instead, since the skolems we've created shouldn't last beyond the case anyway

this way we don't end up with fresh, incompatible, skolems for every case, but a neatly packed existential
pack types of each branch of an if before lubbing

this way we don't end up with fresh, incompatible, skolems for every branch, but a neatly packed existential
you get much nicer lubs this way -- threw in a fast path (I hope) that avoids lubbing when unnecessary (same types)

since lub isn't robust enough to deal with the result of packedType,
and we only really need the trivial case (S =:= T), special case it for now
pack type for translated match -- necessary?
some debuglogging
and then we have havoc courtesy of our good friend TrieIterator
Revert "pack type for translated match -- necessary?"

This reverts commit cd331c0f179261710e71e18e8369f15590fe4d76.
don't pack in ifs after typer
Revert "some debuglogging"

This reverts commit 1abb38d12d3d53456c3b4c692d5f38e47a5eb181.

Conflicts:

	src/compiler/scala/tools/nsc/typechecker/Typers.scala
synth function impl for more functions that match
better typedMatchAnonFun, but still buggy

unhandled exception while transforming Types.scala
error:
     while compiling:  src/compiler/scala/reflect/internal/Types.scala
       current phase:  lambdalift
     library version:  version 2.10.0-SNAPSHOT-20120319-335-e7d72b2e48
    compiler version:  version 2.10.0-SNAPSHOT-20120319-00000000-727533cb8d
  reconstructed args:  -Yvirtpatmat -classpath /tmp -d /tmp

uncaught exception during compilation: java.lang.IllegalArgumentException
error: java.lang.IllegalArgumentException: Could not find proxy for var tvs: scala.collection.immutable.Set in List(variable tvs, method defineBaseTypeSeqOfCompoundType, trait Types$class, package internal, package reflect, package scala, package <root>) (currentOwner= method apply )
	at scala.tools.nsc.transform.LambdaLift$LambdaLifter.searchIn$1(LambdaLift.scala:281)