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`
What is the use-case for this? Afaik we always want to exit with 0 if all requests were cleanly handled and the server shutdown. If there was a problem with that, we might want to exit with a non-zero code.