utils: add two external utilities: bunch and path.py

Adding them inline for some small modifications and because they're too
small to justify the `pip install` time overhead.
devops: enrich configuration elements, add SERVER_NAME
devops: add CDN support

This commit adds a function called config.cdn.proxied(). You can pass
any URL (absolute or relative) to proxied(), and it will look up an
internal table of reverse-proxies (typically CDN endpoints) and see if
this URL is covered by one.

If the URL has a CDN endpoint, proxied() returns the CDN URL. If it
doesn't, it just returns the same string as before.

Relative URLs with no netloc are considered to be relative to SERVER_URL
as set in the configuration.

The table of CDN endpoints can be generated and cached by running
config.cdn.get_cache(). At the time of this writing, get_cache() will
return an empty if AWS credentials aren't found in the configuration,
and a set of CloudFront distributions endpoints visible by these AWS
credentials otherwise. Having two distributions with the same origin URL
leads to undefined results.
assets: add backend support for asset management
frontend: use assets in index (scss, coffee, jst)