[SPARK-2692] [mllib] Decision Tree API update and multiclass bug fix

Summary:
 (1) Split DecisionTree API into separate Classifier and Regressor classes. (https://issues.apache.org/jira/browse/SPARK-2692)
 (2) Bug fixes for recent multiclass PR (https://github.com/apache/spark/pull/886)
This is in preparation for a Python API (https://issues.apache.org/jira/browse/SPARK-2478)

Details on (1) API:

(1a) Split classes:  E.g.: DecisionTree --> DecisionTreeClassifier and DecisionTreeRegressor
(1b) Included print() function for human-readable model descriptions
(1c) Renamed Strategy to *Params.  Changed to take strings instead of special types.
(1d) Made configuration classes (Impurity, QuantileStrategy) private to mllib.
(1e) Changed meaning of maxDepth by 1 to match scikit-learn and rpart.
(1f) Removed static train() functions in favor of using Params classes.
(1g) Introduced  DatasetInfo class for metadata.

Details on (2) bug fixes:

(2a) Inconsistent aggregate (agg) indexing for unordered features.
(2b) Fixed gain calculations for edge cases.

CC: @mengxr @manishamde
I agree that users should not really need to use DTParams, so I will make it private[mllib].  But @BeanProperty is nice since it generates getters/setters for the subclasses DTClassifierParams and DTRegressorParams as well (for Java, as you figured).