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.
David and I discussed this, the problem occurs for variable length vector
fields with a bcf_vector_end value marking the end of the vector. The
vector capacity might be different for the 2 vectors being compared, but
the number of valid elements (including bcf_vector_end) could be the same.
-Karthik

On Sun, Oct 26, 2014 at 2:19 PM, Mauricio Carneiro <notifications@github.com
> wrote:

> In gamgee/individual_field_value.h:
>
> > @@ -110,12 +110,20 @@ class IndividualFieldValue {
> >    bool operator==(const IndividualFieldValue& other) const {
> >      if (this == &other)
> >        return true;
> > -    if (size() != other.size())
> > -      return false;
> > -    for (auto i=0u; i != size(); ++i) {
> > -      if (!utils::bcf_check_equal_primitive(operator[](i), other[i]))
> > -        return false;
> > +    //Use iterators where possible as they take care of field sizes, bcf_*_vector_end
>
> couldn't we just check that end() - begin() == other.end() - other.begin()
> ?
>
> This would save us iterating over if the sizes are mismatched
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/broadinstitute/gamgee/pull/301/files#r19383832>.
>