Cache static files by hash

Implements #2734.

Deployment note: `GRATIPAY_ASSET_URL` needs to be changed to `https://assets.gratipay.com/` on Heroku. I don't think we'll need to change anything on the CDN side, can you confirm that @whit537 ?
For whatever reason, Aspen `Request` objects don't cause an error when passed to `dict.update`:

```python
(Pdb) new_state
'GET /favicon.ico HTTP/1.1\r\nAccept-Language: en-US,en;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nConnection: keep-alive\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36\r\nHost: localhost:8537\r\nCookie: _gauges_unique_year=1; _gauges_unique=1; ajs_anonymous_id=%22fdd4350d-7351-4472-8051-c2463f72988a%22; ajs_group_id=null; ajs_user_id=%22421420%22; _ga=GA1.1.1388643114.1410446414; csrf_token=IIuuRkGf5tpQUujaCGmbAN3N9LNYZ3zD\r\n\r\n'
(Pdb) type(new_state)
<class 'aspen.http.request.Request'>
(Pdb) state.update(new_state)
(Pdb)
```