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 
lets add some tags to the caches. Prob like `assets`, `assets:js`, `assets:[namespace]`, and `assets:[namespace]:js`