Add support to both explicitly and automatically clean-up broadcast

Building on top of [#543](https://github.com/apache/incubator-spark/pull/543/), this PR integrates the functionality to unpersist a broadcast with the cleaning up of variables when they are no longer strongly reachable.

The tests added in BroadcastSuite involve a broader change than usual. In particular, the current BlockManager interface had no proper mechanism of querying blocks that were not reported to the master, and this PR provides this.

The main TODO at this point is to see what we can do about the `WrappedJavaHashMap`.