[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 

There's some discussion of this in the design doc linked from the JIRA.  Basically, there could be a whole range of types, and it's a question of simplicity of the API vs. strong typing.  I thought about templatizing LabeledPoint by LabelType and FeaturesType, but it makes developers & users have to write a bunch more boilerplate whenever they specify types.  The current plan is to use Double for single labels and eventually some other type (Vector?) for multiple labels.