[MLLIB] SPARK-2329 Add multi-label evaluation metrics

Implementation of various multi-label classification measures, including: Hamming-loss, strict and default Accuracy, macro-averaged Precision, Recall and F1-measure based on documents and labels, micro-averaged measures: https://issues.apache.org/jira/browse/SPARK-2329

Multi-class measures are currently in the following pull request: https://github.com/apache/spark/pull/1155
Both `Set` and `Double` are Scala types. It is very hard for Java users to construct such RDDs. Also, the input labels and output predictions are usually stored as `Array[Double]`. Shall we change the input to `RDD[(Array[Double], Array[Double])]` and internally convert it to `RDD[(Set[Double], Set[Double])]` and cache? We can put a contract that both labels and predictions are unique and ordered within a single instance. We don't need it if we use `Set` internally. But later we can switch to `Array[Double]` based solution for speed, because those are very small arrays.