Split TemplateLoader's cache business into another interface and class.

This creates the CacheBackend interface, which will allow for a database cache,
and one concrete implementation FileCacheBackend. This implementation implements
the existing TemplateLoader cache behavior.