[SPARK-4026][Streaming] Write ahead log management

As part of the effort to avoid data loss on Spark Streaming driver failure, we want to implement a write ahead log that can write received data to HDFS. This allows the received data to be persist across driver failures. So when the streaming driver is restarted, it can find and reprocess all the data that were received but not processed.

This was primarily implemented by @harishreedharan. This is still WIP, as he is going to improve the unitests by using HDFS mini cluster.
Ah, that makes sense, actually: `flatMap(identity)` on an iterator here is the equivalent of Python's itertools.chain, whereas `flatten` might imply materializing the flattened collection, which doesn't make sense for an iterator.