Refactor server code in preparation for akka-http backend

Moved the main method 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.class`. 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 oher files.
Maybe beyond the scope of this PR... but would be nice (necessary) if we could select the server here.  Probably using the same system property as would be used in prod mode.  This should mean you can also, just with a system property change, run the all the Play tests against the akka-http implementation.