Reimplement launcher in Java

* Fixes numerous race conditions.
* Implements the force-reload command required by the specification the launcher allegedly implements
* Removes dependency on Ruby
* The launcher waits for the server to finish initialization (return from main method) and returns an error status code if initialization fails.
* The launcher will no longer hang if the server fails to stop.


Caveats:

* Windows is only able to stop servers with a hard kill.
* Some (hopefully minor) race conditions remain due to the inability to call fcntl(F_GETLK) from Java.