Refactor server start code in preparation for akka-http backend

Moved the server intialisation code out of NettyServer and into a new
class called ServerStart. Refactored the existing server start logic
so it is easier to understand. Added tests for server start logic.

Consolidated server configuration into a single class, ServerConfig.
This configuration class will be used by both the Netty and akka-http
server backends.

Created an abstraction for a VM process so that server creation can be
tested properly. This trait, ServerProcess, provides alternative
methods to call instead of calling System.getProperties, System.exit,
etc.

Made it possible to start servers other than NettyServer, by providing
a system property called "server.provider" that locates a...
ServerProvider. The ServerProvider class creates the actual server.
This feaure is only exercised in unit tests for now.

Also split out some of the smaller classes that were previously in
NettyServer.scala into other files.
Add parentheses to stop compiler warnings
Merge pull request #3121 from richdougherty/server-start-refactor

Refactor server code in preparation for akka-http backend