For the purposes of validity testing, there are three notions of
headers:

 1) the raw headers
 2) the intermediate headers (raw headers with ignored columns removed)
 3) the final headers (intermediate headers plus any synthesized column headers)

I've made this explicit in the code.  This resolves a bug that
prevented synthesizing a location column if the componenets were present
in the file to upload but not in the dataset