Wrote Python API and example for DecisionTree.  Also added toString, depth, and numNodes methods to DecisionTreeModel.
Demonstration of bug before submitting fix: Updated DecisionTreeSuite so that 3 tests fail.  Will describe bug in next commit.
Merge remote-tracking branch 'upstream/master' into decisiontree-bugfix
2 bug fixes.

Indexing was inconsistent for aggregate calculations for unordered features (in multiclass classification with categorical features, where the features had few enough values such that they could be considered unordered, i.e., isSpaceSufficientForAllCategoricalSplits=true).

* updateBinForUnorderedFeature indexed agg as (node, feature, featureValue, binIndex), where
** featureValue was from arr (so it was a feature value)
** binIndex was in [0,…, 2^(maxFeatureValue-1)-1)
* The rest of the code indexed agg as (node, feature, binIndex, label).
* Corrected this bug by changing updateBinForUnorderedFeature to use the second indexing pattern.

Unit tests in DecisionTreeSuite
* Updated a few tests to train a model and test its training accuracy, which catches the indexing bug from updateBinForUnorderedFeature() discussed above.
* Added new test (“stump with categorical variables for multiclass classification, with just enough bins”) to test bin extremes.

Bug fix: calculateGainForSplit (for classification):
* It used to return dummy prediction values when either the right or left children had 0 weight.  These were incorrect for multiclass classification.  It has been corrected.

Updated impurities to allow for count = 0.  This was related to the above bug fix for calculateGainForSplit (for classification).

Small updates to documentation and coding style.
Merge remote-tracking branch 'upstream/master' into decisiontree-python-new
Merge branch 'decisiontree-bugfix' into decisiontree-python-new
Bug fix: Off-by-1 when finding thresholds for splits for continuous features.

* Exhibited bug in new test in DecisionTreeSuite: “stump with 1 continuous variable for binary classification, to check off-by-1 error”

* Description: When finding thresholds for possible splits for continuous features in DecisionTree.findSplitsBins, the thresholds were set according to individual training examples’ feature values.  This can cause problems for small datasets, when the number of training examples equals numBins.

* Fix: The threshold is set to be the average of 2 consecutive (sorted) examples’ feature values.  E.g.: If the old code set the threshold using example i, the new code sets the threshold using examples i and i+1.

* Note: In 4 DecisionTreeSuite tests with all labels identical, removed check of threshold since it is somewhat arbitrary.
Merge branch 'decisiontree-bugfix' into decisiontree-python-new
Changed Strategy so it only requires numClassesForClassification >= 2 for classification
Added one more test to DecisionTreeSuite: stump with 2 continuous variables for binary classification.  Caused problems in past, but fixed now.
Merge branch 'decisiontree-bugfix' into decisiontree-python-new
Merge remote-tracking branch 'upstream/master' into decisiontree-bugfix
* Updated Strategy to check numClassesForClassification only if algo=Classification.
* Updates based on comments:
** DecisionTreeRunner
*** Made dataFormat arg default to libsvm
** Small cleanups
** tree.Node: Made recursive helper methods private, and renamed them.
Merge remote-tracking branch 'upstream/master' into decisiontree-python-new
Merge branch 'decisiontree-bugfix' into decisiontree-python-new
Updated meaning of maxDepth by 1 to fit scikit-learn and rpart.
* In code, replaced usages of maxDepth <-- maxDepth + 1
* In params, replace settings of maxDepth <-- maxDepth - 1
In DecisionTree: Changed from using procedural syntax for functions returning Unit to explicitly writing Unit return type.
Merge remote-tracking branch 'upstream/master' into decisiontree-bugfix
Merge remote-tracking branch 'upstream/master' into decisiontree-bugfix
Added documentation for DecisionTree internals