Touching the untouchable.

extempore thinks polymorphism beats boolean constructor parameters
any day of the week.
Small cleanup in typeref toString
print labeldef's parameter types
cleanup in refchecks
implement SIP Type Dynamic
rule out sequence arg to applyDynamic
parse patterns, not exprs in interpolatedString's holes
enable implicit enrichment when typing patterns
synth PartialFunction in uncurry

due to interaction with the CPS plugin, can't synth PartialFun during typer
(the types don't work out: in PartialFun[T, U @cps[V]], U @cps[V] does not conform to Any, and we can't move the annot from the type arg directly to applyOrElse's result,
since then it won't override anything)

thus, we face the pain of mangling labeldefs again

resetLocalAttrsKeepLabels can't use leaveAlone

don't cast matcherror throw, uncurry gets confused

uncurry: cast selector valdef's rhs to avoid skolem mismatch

NOTE: I'm not happy about this code, but I don't know
how to make the clean way (typedMatchAnonFun) compatible with the CPS plugin
one avenue to explor would be to introduce PartialFunCPS,
which is transformed into a regular PartialFun
when T @cps[U] is turned into ControlContext[T, U]
more prudent bridging to unapply[Seq]

since we can't statically know whether the unapply
we'll be bridging to is synthetic, drop this condition,
and do pessimistic bridging for all unapply[Seq]
(i.e., if we can't statically guarantee the type
that would be assumed to be safe to cast to by a synthetic
extractor, do the type test and return None if it fails)
wip: put skeleton for typetag-based typetests in place
virtpatmat: initial CPS support

typers&patmatvirtualizer have ad-hoc support for dropping annotations
in a way that makes the CPS plugins happy... this is not ideal,
but unless virtpatmat runs after the plugin phases, I don't see how to solve it
running virtpatmat after the CPS plugin would mean the pattern matching evaluation
cannot be captured by CPS, so it's not even desirable to move it to a later phase

- typedIf must lub annotated types
- drop selector.tpe's annotations
- drop annots in matchEnd's argument type
- deal with annots in casts synth by in virtpatmat
  (drop them from type arg to asInstanceof, recover them using type ascription)
- workaround skolemize existential dropping annots

CPS is the main reason why typedMatchAnonFun is not used anymore,
and PartialFunction synthesis is moved back to uncurry (which is quite painful due to labeldefs being so broken)
we can't synth partialfunction during typer since T @cps[U] does not conform to Any,
so we can't pass it as a type arg to PartialFunction, so we can't type a cps-transformed PF
after the CPS plugin, T @cps[U] becomes ControlContext[...], which is a type we can pass
to PartialFunction

virtpatmat is now also run until right before uncurry
(so, can't use isPastTyper, although it means more or less the same thing -- we don't run after uncurry)

the main functional improvements are in the selective ANF transform
its treatment of labeldefs was broken: for example,
LabelDef L1; LabelDef L2 --> DefDef L1; L1(); DefDef L2; L2()
but this does not take into account L1 may jump over L2 to another label
since methods always return (or fail), and the ANF transform generates ValDefs
to store the result of those method calls, both L1 and L2 would always be executed
(so you would run a match with N cases N times, with each partial run starting at a later case)

also fixed a couple of weird bugs in selective anf that caused matches to be duplicated
(with the duplicate being nested in the original)

since label defs are turned into method defs, and later defs
will be nested in the flatMap calls on the controlcontext
yielded by earlier statements, we reverse the list of method
definitions, so that earlier (in the control flow sense) methods
are visible in later ones

selective CPS now generates a catch that's directly digestible by backend
virtpatmat on by default; chicken out: -Xoldpatmat

some tests (unreachability, exhaustivity, @switch annotation checking) are still run under -Xoldpatmat,
but that will change before we go into RC mode
Merge commit 'refs/pull/389/head'; commit 'refs/pull/390/head'; commit 'refs/pull/391/head' into develop