SI-6355 SI-7059 it is possible to overload applyDynamic

As our discussion at https://issues.scala-lang.org/browse/SI-6355 shows,
it looks like it is possible to overload applyDynamic, even though a
straightforward way is closed. This commit codifies the pattern proposed
by @paulp and makes sure that it doesn’t break in the future.
Merge pull request #3310 from xeno-by/topic/overload-dynamic

SI-6355 SI-7059 it is possible to overload applyDynamic
codifies the state of the art wrt SI-8104

As it was discovered in SI-8104, whiteboxity doesn’t apply equally to
type parameters and type members of materialized type classes.

During implicit search and subsequent type inference, whitebox type parameters
are consistently erased to wildcards, whereas whitebox type members sometimes
remain as is and get in the way of signature conformance checks.
Merge pull request #3311 from xeno-by/topic/fine-points-of-whiteboxity-master

(master) codifies the state of the art wrt SI-8104
Materializes Liftable instances for arbitrary case classes.

Now case classes can be used in quasiquotes:

```scala
Welcome to Scala version 2.11.0-20131221-045216-9f0594c577 (OpenJDK 64-Bit Server VM, Java 1.7.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class Test(str: String, lst: List[Int])
defined class Test

scala> val test = Test("test", List(1,2,3))
test: Test = Test(test,List(1, 2, 3))

scala> showRaw(q"$test")
res0: String = Apply(Select(Select(Select(Select(Select(Select(Select(Ident($line7.$read), TermName("$iw")), TermName("$iw")), TermName("$iw")), TermName("$iw")), TermName("$iw")), TermName("$iw")), TermName("Test")), List(Literal(Constant("test")), Apply(Select(Select(Select(Ident(scala), TermName("collection")), TermName("immutable")), TermName("List")), List(Literal(Constant(1)), Literal(Constant(2)), Literal(Constant(3))))))

scala> val cm = runtimeMirror(getClass.getClassLoader)
cm: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@72b82c2a of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath [(memory)] and parent being scala.reflect.internal.util.ScalaClassLoader$URLClassLoader@195bb43d of type class scala.reflect.internal.util.ScalaClassLoader$URLClassLoader with classpath [file:/usr/lib/jvm/java-7-openjdk/jre/lib/resources.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/rt.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/jsse.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/jce.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/charsets.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/rhino.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/ext/dnsns.jar,file:/usr/lib/jvm/java-7-openjdk/jre/lib/e...
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox

scala> val tb = cm.mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@31b645a7

scala> tb.eval(q"$test")
res1: Any = Test(test,List(1, 2, 3))
```