re-align 2.10.x's pattern matcher with master's

The diff was mostly code cleanup, so most of that was propagated from master to 2.10.x.
The remaining diff is encapsulated in compatibility stubs (see below).
(There was also the on/off potential for the 2.10.x "new" pattern matcher.
 The old one is gone in 2.11, so no turning off new patmat, of course.)

The stubs:

```
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
```
[refactor] move PatternMatching.scala to transform.patmat
[refactor] split patmat in smaller files
[refactor] type analysis consolidation

move instanceOfTpImplies out of CodeGen into TypeAnalysis
[refactor] prepare migration from Cond to Prop

There's no change in behavior.
Remove `modelNull` boolean in favor of subclassing.
drop Cond in favor of Prop

This brings the optimizations and the analyses closer together.

In the future we may consider using a solver in the optimizations.
For now, implication is checked ad-hoc using hash-consing and equality/subset tests...

NOTE: prepareNewAnalysis resets said hash-consing, so must be
called before approximating a match to propositions
[refactor] make hash-consing more robust
[refactor] better name for symbolicCase
[refactor] move some logic-related code