[SPARK-2938] Support SASL authentication in NettyBlockTransferService

Also lays the groundwork for supporting it inside the external shuffle service.
I wonder if we should mark this \@developerApi or something to prevent people from using it themselves.