[SPARK-3207][MLLIB]Choose splits for continuous features in DecisionTree more adaptively

DecisionTree splits on continuous features by choosing an array of values from a subsample of the data.
Currently, it does not check for identical values in the subsample, so it could end up having multiple copies of the same split. In this PR, we choose splits for a continuous feature in 3 steps:

1. Sort sample values for this feature
2. Get number of occurrence of each distinct value
3. Iterate the value count array computed in step 2 to choose splits.

After find splits, `numSplits` and `numBins` in metadata will be updated.


CC: @mengxr @manishamde @jkbradley, please help me review this, thanks.
I think this will fail when all values for a feature are the same.  We should either change the code to add at least 1 split (even though it may never be used), or just allow a feature to have 0 splits.  If we allow 0 splits, then we should check to make sure the DecisionTree training still works when a feature has 0 splits, and also when all features have 0 splits.