SPARK-4156 [MLLIB] EM algorithm for GMMs

Implementation of Expectation-Maximization for Gaussian Mixture Models.

This is my maiden contribution to Apache Spark, so I apologize now if I have done anything incorrectly; having said that, this work is my own, and I offer it to the project under the project's open source license.


You might not care about this at all, but calling `foreach` on an `Array` is actually notably slower than using a while loop over the indices.  `foreach` over a `Range` is actually pretty close to while loop (ie. `(0 until x.length).foreach{idx => s += x(idx)}`.  Or if you don't care about runtimes, then you can always just call `array.sum` (it actually comes from an implicit conversion to `WrappedArray`):

```
scala> ((0 to 100).map{_ / 100.0}.toArray).sum
res2: Double = 50.5
```