RDD.unpersist: probably the most desired feature of Spark

This builds upon the block removal ability I added a while ago, and also on the RDD removal code Ram added. 

I pulled his code and cleaned it up and made sure the tests are properly coded against concurrency. 

Side note: I thought this would only take 5 mins when I decided to do it. Turned out it took over 2 hrs :(