Store all variant headers and also combine them for an overall header

Before: the first variant file's header was used for all variants in MultipleVariantReader/Iterator

Now: each variant returned by MultipleVariantIterator is associated with its source header, and MultipleVariantReader::combined_header() returns the combination of all input headers.
keyword `inline` on the header file doesn't do anything, this is automatically inlined.