[SPARK-3019] Pluggable block transfer interface (BlockTransferService)

This pull request creates a new BlockTransferService interface for block fetch/upload.

The pull request also refactors the existing ConnectionManager to implement BlockTransferService (CMBlockTransferService). 

TODOs that should be part of this PR:
- [ ] Bring this up to date with master
- [ ] Look at the removed unit tests and see if they still make sense to be added back

TODOs that should be separate PRs:
- [ ] Implement NettyBlockTransferService