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 ?
Should this `raise Response(410)` like line 36?  or should line 36 `return request` like this?  I don't understand why they behave differently based on where the desired etag comes from.