Small DecisionTree updates:
* Simplification: Updated calculateGainForSplit to take aggregates for a single (feature, split) pair.
* Internal doc: findAggForOrderedFeatureClassification
Major changes:
* Created ImpurityAggregator classes, rather than old aggregates.
* Feature split/bin semantics are based on ordered vs. unordered
** E.g.: numSplits = numBins for all unordered features, and numSplits = numBins - 1 for all ordered features.
* numBins can differ for each feature

DecisionTree
* Major changes based on new aggregator setup
** For ordered features, aggregate is indexed by: (nodeIndex)(featureIndex)(binIndex).
** For unordered features, aggregate is indexed by: (nodeIndex)(featureIndex)(2 * binIndex),
* Added LearningMetadata class
* Eliminated now-unused functions:
** extractNodeInfo
** getNumSplitsForFeature
** getBinDataForNode (Eliminated since it merely slices/reshapes data.)

ImpurityAggregator classes
* Changed main aggregate operation to create binAggregates (binSeqOp, binCompOp) to use the aggregator.
* Before, for unordered features, the left/right bins were treated as a separate dimension for aggregates.  They are now part of the bins: binAggregates is of size: (numNodes, numBins_f, numFeatures) where numBins_f is:
** 2 * [pow(2, maxFeatureValue - 1) - 1] for unordered categorical features
** maxFeatureValue for ordered categorical features
** maxBins for continuous features

DecisionTreeSuite
* For tests using unordered (low-arity) features, removed checks of Bin.category, which only has meaning for ordered features.