[SPARK-2359][MLlib] Correlations

Implementation for Pearson and Spearman's correlation.
Did that before my last comment: 
Here's zip:

def zip[U: ClassTag](other: RDD[U]): RDD[(T, U)] = {
    zipPartitions(other, true) { (thisIter, otherIter) =>
      new Iterator[(T, U)] {
        def hasNext = (thisIter.hasNext, otherIter.hasNext) match {
          case (true, true) => true
          case (false, false) => false
          case _ => throw new SparkException("Can only zip RDDs with " +
            "same number of elements in each partition")
        }
        def next = (thisIter.next, otherIter.next)
      }
    }
  }

zipPartitions here returns new ZippedPartitionsRDD2(sc, sc.clean(f), this, rdd2, preservesPartitioning), which extends ZippedPartitionsBaseRDD, which has the following:
override val partitioner =
    if (preservesPartitioning) firstParent[Any].partitioner else None

So yes, the partitioner is propagated from the parent via zip.