Cleaner shutdown

Provide a shutdown mechanism which waits until IIn-flight reqests are drained.
Lol yes, of course.

An alternative is something like this...

```
serverShutdownChan := server.Run(os.Getenv("PORT"), 5 * time.Minute)
go awaitShutdownSignals([]ShutdownChan{serverShutdownChan, shutdownChan})
```

Seems like it exposes less of server state, not sure it matters.