Cache compiled assets

Adds a caching layer if `cantina-cache` exists and `assets.{type}.{namespace}.cache` is `true`.

Code is almost identical for all asset types (css/js/templates) which is a bummer, but for now this is good. Increases boot time a ton when fetching cached assets.

@cpsubrian