[SPARK-3133] embed small object in broadcast to avoid RPC

For most of tasks, the serialized data will small, such as less than 4k or 8k, we can avoid the RPC at all if the data was embedded in the Broadcast object it self.

With this patch, The size of task will be similar to that before we use broadcast for them, no RPC (but still cached, only one deserialization per executor)

It will increase the bandwidth during schedule tasks, for example, if we schedule 10k tasks per seconds, then it will need 40M Bytes more bandwidth for the embedded object in the worst cases.  
can u make sure we have unit tests for both cases? i.e. small broadcast and large ones.