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?
I've seen this pattern in at least 4 different places now. Surely this could be taken into its own small struct with a few basic methods?

```go
type Closable struct {
    closed int32
}

func (c *Closable) IsClosed() bool {}
func (c *Closable) Close() {}
```

Something like that?