[SPARK-4031] Make torrent broadcast read blocks on use.

This avoids reading broadcast variables when they are referenced in the closure but not used by the code.
Note: This is a WIP and a request for comments. I will update HttpBroadcast and add some tests if it sounds good.

cc @rxin @JoshRosen for review
I don't think that `Utils.tryOrIOException` is _strictly_ necessary here, since this method will no longer be called from `readObject()`, so we won't have to worry about any exceptions that it throws being swallowed inside of a Java deserializer.  I added the `tryOrIOException` blocks as part of a general campaign to combat error-reporting issues in our custom Externalizable / Serializable classes.  It's fine to use this here, though, if you want to restrict the range of possible exceptions that can be thrown when calling `getValue()`.