[SPARK-4789] [mllib] Standardize ML Prediction APIs

This is part (1) of the updates from the WIP PR in [https://github.com/apache/spark/pull/3427]

Abstract classes for learning algorithms:
* Classifier
* Regressor
* Predictor

Traits for learning algorithms
* ProbabilisticClassificationModel

Concrete classes: learning algorithms
* LinearRegression
* LogisticRegression (updated to use new abstract classes)

Concrete classes: other
* LabeledPoint (adding weight to the old LabeledPoint)

Other updates:
* Modified ParamMap to sort parameters in toString

Test Suites:
* LabeledPointSuite
* LinearRegressionSuite
* LogisticRegressionSuite
* + Java versions of above suites

CC: @mengxr  @etrain  @shivaram 

Do you mean Vector would be replaced with Array[Feature] where Feature would have subclasses like:
* ContinuousFeature(f: Double)
* CategoricalFeature(f: Int)

That loses a lot of the benefits of Vector (fewer Java Objects).

Or do you mean Vector would be replaced with Features, which has subclasses like:
* ContinuousFeatures(f: Vector)
* CategoricalFeatures(f: Array[Int])
* MixedFeatures(contFeat: Vector, catFeat: Array[Int])

That would be reasonably efficient but would be a bit more awkward for both developers (APIs + casting) and users (casting data loaded from elsewhere).

W.r.t. generic types, I agree it would be unusual to want more than real values and categorical values, but I could imagine weak learning algorithms specific to images or text which operate on special types.  (On a related note, I'm debating whether boosting and bagging should support this typed API at all.  They will need types for labels but not for features.)