restructure installer file extraction so that we don't have to do a separate pass to determine if all files are present