Support for zero downtime restarts

This uses [tablecloth](http://godoc.org/github.com/alext/tablecloth) to add support for reloading the application
without dropping any requests.  The restart will additionally pick up a
new version of the binary if it has changed (ie when deploying)

This has involved switching to use a `sync.WaitGroup` to block the main
process once the servers have started.  Tablecloth requires that the
main process exits once all the ListenAndServe calls return.