Store cachefile strategy on file; not generator

The file can appeal to the generator for the value, but it shouldn't
require it; it just does that as a convenience.
Store the file after we generate it

This means reading ImageCacheFiles won't result in an additional storage
operation.
Reduce calls to backend

Reading from an `ImageCacheFile`, will result in accessing its `file`
attribute repeatedly which would result in the `before_access` signal
being dispatched, which in turn would result in many unnecessary calls
to the image cache backend. With this change, we don't send
`before_access` if the file has already been created.

Similarly, we don't need to try to generate the image if we know for
certain that it's already been generated (because we have a reference
to it).
Reset content pointer
Split before_access into two signals

Differentiating between when the generated file content is required and
when the generated file is just required to exist gives us more
flexibility with strategies.
Fix None checks

Files can be falsy