Add rate limiting

This pull request adds support for rejecting incoming connections if too many goroutines are active at once, and rate limits HTTP requests from origin IPs. `RateLimitedHandler` uses a token bucket implementation ported from [`node-restify`](https://github.com/mcavage/node-restify).
Makes sense—I chose 3 minutes for the TCP keep-alive period because that's what Go's [default `tcpKeepAliveListener` uses](https://codereview.appspot.com/48300043/). We can adjust this to a higher value, though.

I don't think I understand how this would cause a client to reconnect—unless the client is behind a firewall that filters keep-alive packets, how would it receive a `FIN` packet (if the keep-alive fails), but not a keep-alive packet?