[SPARK-2851] [mllib] DecisionTree Python consistency update

Added 6 static train methods to match Python API, but without default arguments (but with Python default args noted in docs).

Added factory classes for Algo and Impurity, but made private[mllib].

CC: @mengxr @dorx  Please let me know if there are other changes which would help with API consistency---thanks!
I agree it is error-prone; I can remove that default from Python.  At some point, I'd like us to have that as a default and intelligently try to guess whether a feature is categorical or not based on the number of distinct values (in order to support users who are very new to data analysis).