SPARK-3883 SSL support for HttpServer and Akka

 - Introduced SSLOptions object
 - SSLOptions is created by SecurityManager
 - SSLOptions configures Akka and Jetty to use SSL
 - SSLOptions uses property file which is node-local to set SSL settings
 - Provided utility methods to determine the proper Akka protocol for Akka requests and to configure SSL socket factory for URL connections
 - Added tests cases for AkkaUtils, FileServer, SSLOptions and SecurityManager
That's the tricky part on anything non-Yarn (to be frank, I'm not 100% familiar with how those others work).

Basically what you need is a two step process:
- launcher talks to cluster manager, makes needed resources available somehow.
- executors are launched and either those resources are available, or it gets them from the launcher.

On Yarn, this works using the distributed cache. The Yarn client will upload whatever files you ask to Yarn (see ClientBase.scala, I think the method is `prepareLocalResources` or something), and they'll be available for the executors when they launch. So there's very little to do here: executors pick needed files (trust store, cert) from their working dir, and SSL options are passed to the executors on the command line (like other akka options today).

If something like the distributed cache is not available, it does become a little trickier. Basically, the executor needs to launch, download needed resources from the launcher, and only then start Akka. You can pass ssl options on the command line of the executor if needed, but no files, so it should be able to connect back to the HTTP server running in the launcher to download resources.

If that's not possible (or too hard today), I'm okay with punting that to a different task and requiring the trust store / cert to be available on all hosts for non-Yarn modes. But I really think we should support automatically distributing the SSL conf in Yarn mode, since it should be pretty straight-forward.