updated the asset file to access its source via a cache object

This is setting the stage for cacheing source by mtime.  This keeps
the asset file API the same but puts a cache between the asset file
and its source.  The cache key for source includes its mtime.  This
will allow you to cache source data that is expensive to compile
but have the cache expire if the source is updated.

In coming PRs, I will add the cache handler API and a basic in-memory
cache handler.  This will give a framework for developing custome
cache handlers that for things like redis, file, etc stores.

@jcredding ready for review.