Change `Server` command methods and state handling

This updates the `Server`'s command methods naming, changing `run`
to `start`. This is more consistent with the other command names.
Furthermore, this also updates the state handling to use mutex
locks and better naming. This is to protect from multiple threads
setting/reading the state (since it will typically be done through
signal trapping). The naming is to be clear between asking the
server about what it's state has been set to or asking about what
parts of it are running. All of this to to simplify the server's
interface and make it clearer to understand.

This also essentially rewrites the unit tests for the `Server`.
Previously they used real client-servers to do testing which is
slow and complicated. This uses stubbing and spies instead which
improves the speed and avoids complications of using separate
ip's and ports.

Closes #20