Cache compiled templates

Currently Curly recompiles (i.e., generates the  rendering ruby code) each time `Curly::TemplateHandler.call` is invoked.
In pages/partials where the same curly partial is rendered many times (i.e., collections) this can be avoided and the same compiled template can be reused.

This PR adds a cache for compiled templates such that when a template has already been compiled the compilation step is skipped and the cached result is returned.