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 ?
Well, they support treating resources as different cacheable entities based on querystring differences. But do they pass the querystring through to the origin? That's what we need.