Add graceful shutdown

Adds graceful shutdown per #139. `Application.Close()` performs the following steps:

* Stops the HTTP `/update` listener and closes all open TCP connections. This should deregister the instance from the ELB.
* Deregisters from the balancer, waiting for the change to propagate.
* Closes the WebSocket listener and disconnects all existing clients.
* Stops emitting client count metrics.
* Deregisters from the locator, waiting for the change to propagate.
* Closes the routing listener.

To make implementing this a little easier, I've split the listeners into `SocketHandlers` and `EndpointHandlers`, and moved the health-related handlers into a separate plugin to avoid a circular dependency.

Closes #139 and #156.

@bbangert, @jrconlin r?
This was a while ago, so I could be completely wrong. When we shut down the server, we're disconnecting all connected clients. I think you mentioned we'll want a delay between disconnects so we don't overwhelm the other servers when the clients reconnect.