Finally realized that aggregating and collecting per partition data to the driver is more efficient.  Since we've already aggregated everything, there's no need to split the calculation in to two parts, and we only need to deal with a Cx1 vector plus a CxD matrix on driver side.

In this case, I found `aggregate` much more handy than `mapPartitions` and `collect`.  All those length comments can also be removed.  Just one note: a 1x1 `DoubleMatrix` is considered to be a scalar in jblas, so there's no need to initialize the zero vector with proper dimension any more.  At last, 1 RDD, 0 transformation, 0 shuffle and 1 action, I think this version is efficient and clear enough :-)

BTW, this is the first mail I received in 2014, happy new year to you all!