[WIP] SPARK-2157 Ability to write tight firewall rules for Spark

https://issues.apache.org/jira/browse/SPARK-2157

This pull request adds the ability to specify every port opened by Spark that I could find to configure.  Specifically, it adds the following four configuration options:

- `spark.fileserver.port`
- `spark.broadcast.port`
- `spark.replClassServer.port`
- `spark.blockManager.port`

Of those options, most will attempt to fall back to the n+1 incremental port if the port is currently in use.  This incremental fallback logic is done for :

- `spark.broadcast.port`
- `spark.blockManager.port`
- `spark.replClassServer.port`

But not for `spark.fileserver.port`


Things still thinking about for this PR:

- I'm still observing instances of `CoarseGrainedExecutorBackend` listening on ephemeral ports
- In earlier documentation `spark.driver.port` is described as being the way to configure :7077 on Spark Master, and I'm not sure this is the case.  If so the same config item is used for multiple things, as it's also the port on which the applications starts listening on Akka.

Many thanks to @epahomov whose work this is based off of. 

Would it be a good idea to modify `startWithIncrements` to accept the name of the service being started? I'm a bit worried about the case where the user tries to lock down all the ports, but there is contention. Instead of failing there Spark will just log a WARN message, so at least we should say what component is failing in the WARN message.