Optimize match that tuples only to then decompose.

tests still failing:
 - test/files/pos/t5399.scala  - pair with existentials crashing scalac
 - test/files/neg/t5440.scala  - missed exhaustivity warning
 - test/files/neg/patmatexhaust.scala   - missed exhaustivity warning

```
(e1,...,eN) match {
  case (p1, ..., pN) if g =>
  ...
  case (q1, ..., qN) if g' =>
  case _ if g'' =>
}
```

is compiled by introducing the prelude

```
val x1 = e1
...
val xN = eN
```

and then referring directly to the `xi` that corresponding to the `i`th subpattern,
in the translation of the match, rather than selecting the `_i` component of the tuple.

This eliminates the allocation of the tuple and the indirection of accessing its fields.