refactor the pattern matcher into smaller files

- align the 2.11 and 2.10 pattern matcher implementations, factoring out their differences as compatibility stubs (the difference was mostly code cleanup)
- split the monster into 5 smaller monsters [*] and subsequent minor refactors
- drop `Cond` in favor of `Prop` and sweet up around the area

review by @paulp, @retronym and anyone else who'd like to split the monster

[*] To verify the split in smaller files (it doesn't change any behavior, I promise), may I suggest:

```
git checkout e14846b

cat                                                                     \
src/compiler/scala/tools/nsc/transform/patmat/PatternMatching.scala     \
src/compiler/scala/tools/nsc/transform/patmat/MatchTranslation.scala    \
src/compiler/scala/tools/nsc/transform/patmat/MatchTreeMakers.scala     \
src/compiler/scala/tools/nsc/transform/patmat/MatchCodeGen.scala        \
src/compiler/scala/tools/nsc/transform/patmat/MatchAnalysis.scala       \
src/compiler/scala/tools/nsc/transform/patmat/Logic.scala               \
src/compiler/scala/tools/nsc/transform/patmat/MatchOptimization.scala   > /tmp/patmat.scala

git checkout e14846b^

opendiff src/compiler/scala/tools/nsc/typechecker/PatternMatching.scala /tmp/patmat.scala
```