Added a new configuration concept called ServiceConfig. This is a config
object that is passed to the Service implementation's configure method
(also new in this commit), which allows Service implementation to
configure themselves.

Service specific configuration params can now be set with the MiniCluster
builder's setServiceConfig method.

The MiniCluster is now a more flexible Factory to new Service implementations,
offering a static registerService method that allows service implementations
to register themselves in static initializers.

The command line now accepts service configs as dynamic JCommander config
parameters. This will automatically be populated in the ServiceConfig
object. It also accepts fully qualified class names of services to run,
which allows new Service implementations to be added on the classpath,
and automatically runnable and configurable via the command line.

All listen ports are configurable via the services, giving us more control
over what sockets are bound to. Also, all sockets will be listening on
the same IP, even if bindIP is not set (the default will be 127.0.0.1).
Wildcard ports are now never used, even when ports aren't explicitly
configured.

We now wait for HBase regionserver to come online using the
waitForServerOnline method isntead of using a while(true) loop.

Shutdown notification now uses a CountDownLatch instead of the notify
method.