[SPARK-1065] [PySpark] improve supporting for large broadcast

Passing large object by py4j is very slow (cost much memory), so pass broadcast objects via files (similar to parallelize()).

Add an option to keep object in driver (it's False by default) to save memory in driver.
If users' existing code relies on accessing Broadcast.val on the driver, I'm worried that this will confuse them when they receive None.  Maybe we can add a None check to Broadcast.value that throws an exception if they try to access the value in these cases.

I suppose there's still a corner-case where a user might want to broadcast None, so if we're being paranoid we could also pass the `keep` flat to Broadcast and check it before throwing the exception.