[SPARK-4087] use broadcast for task only when task is large enough

Using broadcast for small tasks has no benefits or even some regressions (several RPCs),  also there some stable issues with broadcast, so we should use broadcast for tasks only when the serialized tasks are large enough (larger than 8k, be default, maybe changed in future).

In practice, most of tasks are small, so this should improve the stability for most user cases, especially for tests, which will start and stop context multiple times.
As discussed offline, user will take the risk if they change it to non-reasonable values.