gracefully shutting down server

fixes #13 

Here we introduce gracefully shutdown behaviour of the server. 
- process listens for `SIGINT`, `SIGTERM`, `SIGKILL`
- when one of the signals was received we delay closing of the TCP listener
- after the short delay we close the TCP listener so no new connections will be accepted
- when the listener was closed we wait for a few seconds again to let established connections finish
- exit the process with code `0`
FYI I think the Go format guidelines would want to see this as `SetOSExitDelay()`.