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.


The downside is every time `predictMembershiip` is called we need to re-broadcast `mu`, `sigma`, and `weights`.  Because we already broadcast the RDD closure since 1.1, it is not necessary to do this unless we could reuse the broadcast objects.

Btw, if we add a method to `GaussianMixtureModel` that can predict individual instance, this could be done by broadcast the entire model, which is about the same performance.