Because file size is part of the cache key, overriding the main file
content leaves us unable to load its HeaderFileInfo from a preamble.
The fix is a little messy: write a second copy with size 0 in the key.
During deserialization, if a load fails and the main filename matches,
make a second attempt with this size-0 key.
In both cases, we only do this for preambles, not for modules.