cache asset file object on access

Building asset files has become a non-trivial operation with the
addition of source proxies and combinations.  This changes the
`Dassets[]` method to cache the asset file objects so they don't
have to be rebuilt each time they are accessed.

This can provide a significant speed boost when using large/complex
combinations as an asset file may be accessed multiple times in any
given request (template rendering, middleware serving, etc).