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

...sion trees. @jkbradley @mengxr @chouqin Please review this.
To remove a checkpoint, you'll need to remove the checkpoint file manually.  You should be able to do something like:
```
val fs = new Path(checkpointDir).getFileSystem(sparkContext.hadoopConfiguration)
fs.delete(checkpointFile)
```
after the next checkpoint has finished.