I'd prefer if this just used a normal TimeStampedHashMap or even just a normal HashMap and then we added an explicit message to the MapOutputTracker to clean up the statuses when a given shuffle dependency goes out of scope. I think it's fine to relay this through the block manager for now since the driver doesn't have a direct path to the MapOutputTracker.

The main motivation is to simplify this patch and avoid introducing another mechanism for deciding when to keep/evict things (this bounded size map). We can just have the invariant that if a shuffle is in scope then it's statuses are still present everywhere, if it goes out of scope it's statuses go away. If people want other behavior then this they can use the timestamped map.