[SPARK-3161][MLLIB] Adding a node Id caching mechanism for training deci...

...sion trees. @jkbradley @mengxr @chouqin Please review this.
Currently, this skips checkpointing if checkpointDir == None.  However, a user could set the SparkContext checkpointDir before calling DecisionTree.  Can the behavior be changed as follows:
* If a checkpointDir is given here, then it should overwrite any preset checkpointDir in SparkContext.
* If no checkpointDir is given, then the code should check the SparkContext (via cur.sparkContext.getCheckpointDir) to see if one has already been set.