SPARK-2519 part 2. Remove pattern matching on Tuple2 in critical section...

...s of CoGroupedRDD and PairRDDFunctions

This also removes an unnecessary tuple creation in cogroup.
can we save the key into a variable here so we don't call _1 twice?

I was looking at the bytecode generated by pattern matching versus non-pattern-matching, and the main difference is that we bypass some unnecessary branches:
{code}
    final def apply(x0$1: Tuple2): Unit = {
      case <synthetic> val x1: Tuple2 = x0$1;
      case4(){
        if (x1.ne(null))
          {
            val k: Int = x1._1$mcI$sp();
            val v: Int = x1._2$mcI$sp();
            matchEnd3({
              scala.this.Predef.println(scala.Int.box(k.+(v)));
              scala.runtime.BoxedUnit.UNIT
            })
          }
        else
          case5()
      };
      case5(){
        matchEnd3(throw new MatchError(x1))
      };
      matchEnd3(x: runtime.BoxedUnit){
        ()
      }
{code}