combinations: have the source cache get its data from a set of files

This is the first step to implementing combinations.  It alters the
source cache to get its data from a set of source files, rather than
just a single source file.

It has been backported here where the single source file from the
previous implementation is the only file in the set of source files.
In coming commits combinations will be used to drive multiple files
in the set of source files.