[SPARK-2521] Broadcast RDD object (instead of sending it along with every task).

This should substantially reduces task size for large jobs (with large closures). It should improve task dispatching and scheduler throughput.

Once this is committed, we can also remove the JobConf broadcast in HadoopRDD.

TODO:
- [x] Log broadcast size
- [x] Unit tests?


A simple way to test this:
```scala
val a = new Array[Byte](1000*1000); scala.util.Random.nextBytes(a);
sc.parallelize(1 to 1000, 1000).map { x => a; x }.groupBy { x => a; x }.count
```

Numbers on 3 r3.8xlarge instances on EC2
```
master branch: 5.648436068 s, 4.715361895 s, 5.360161877 s
with this change: 3.416348793 s, 1.477846558 s, 1.553432156 s
```

It would be nice to add this in this patch, we can just choose a threshold