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.
couldn't we just check that `end() - begin() == other.end() - other.begin()` ?

This would save us iterating over if the sizes are mismatched