Merge pull request from aarondav: Utilize DiskBlockManager pathway for temp file writing

This gives us a couple advantages:

- Uses spark.local.dir and randomly selects a directory/disk.
- Ensure files are deleted on normal DiskBlockManager cleanup.
- Availability of same stats as usual DiskBlockObjectWriter (currenty unused).

Also enable basic cleanup when iterator is fully drained.
Still requires cleanup for operations that fail or don't go through all elements.
Simplify merge logic based on the invariant that all spills contain unique keys
Fix CheckpointSuite test fail