Cleaner shutdown

Provide a shutdown mechanism which waits until IIn-flight reqests are drained.
Run() gets it's own go routing in main. go server.Run(), see line 128 right above. This gets printed, and then we wait on the shutdown channel and the waitgroup.