Initial implementation of HDFSBackedBlockRDD.

This RDD pulls the block from BlockManager, if it exists in the Block Manager. If it is not found, the data is read from a file on HDFS.
Actually (4) is not required. I don't think we actually need to be resilient against that one. 

Even (2) is not required, but that can be done to ensure that we always read from BM if we have to.