merge 2.10.x and the patmat refactoring into master

see #2120 -- nothing to see here but the merge commits:

```patch
 -  def newTransformer(unit: CompilationUnit): Transformer =
 -    if (opt.virtPatmat) new MatchTransformer(unit)
 -    else noopTransformer
++  def newTransformer(unit: CompilationUnit): Transformer = new MatchTransformer(unit)
```

```patch
+   // 2.10/2.11 compatibility
 -  protected final def dealiasWiden(tp: Type)   = tp.dealias                       // 2.11: dealiasWiden
 -  protected final def mkTRUE                   = CODE.TRUE_typed                  // 2.11: CODE.TRUE
 -  protected final def mkFALSE                  = CODE.FALSE_typed                 // 2.11: CODE.FALSE
 -  protected final def hasStableSymbol(p: Tree) = p.hasSymbol && p.symbol.isStable // 2.11: p.hasSymbolField && p.symbol.isStable
 -  protected final def devWarning(str: String)  = global.debugwarn(str)            // 2.11: omit
++  protected final def dealiasWiden(tp: Type)   = tp.dealiasWiden
++  protected final def mkTRUE                   = CODE.TRUE
++  protected final def mkFALSE                  = CODE.FALSE
++  protected final def hasStableSymbol(p: Tree) = p.hasSymbolField && p.symbol.isStable
```


the 2.10.x merge:
```patch
 -      var materializer = atPos(pos.focus)(gen.mkMethodCall(TagMaterializers(tagClass), List(tp), if (prefix != EmptyTree) List(prefix) else List()))
 +      val materializer = atPos(pos.focus)(gen.mkMethodCall(TagMaterializers(tagClass), List(tp), if (prefix != EmptyTree) List(prefix) else List()))
-       if (settings.XlogImplicits.value) println("materializing requested %s.%s[%s] using %s".format(pre, tagClass.name, tp, materializer))
+       if (settings.XlogImplicits.value) reporter.echo(pos, "materializing requested %s.%s[%s] using %s".format(pre, tagClass.name, tp, materializer))
```