[SPARK-4516] Cap default number of Netty threads at 8

In practice, only 2-4 cores should be required to transfer roughly 10 Gb/s, and each core that we use will have an initial overhead of roughly 32 MB of off-heap memory, which comes at a premium.

Thus, this value should still retain maximum throughput and reduce wasted off-heap memory allocation. It can be overridden by setting the number of serverThreads and clientThreads manually in Spark's configuration.
We used to let the TransportContext decide how many cores to use if numUsableCores were 0 -- since Spark is inserting this information about the maximum it thinks it needs, I inserted the logic of using Runtime to approximate the number of cores into here so we can also apply the max in this case.