Added LUT for merged header in MultipleVariantReader

1. Added MergedVCFLUT capability in utils/merged_vcf_utils.*. This class is now used within MultipleVariantReader.
2. Added test case for LUT.
3. Fixed signed-unsigned comparisons
4. Added some useful functions in VariantHeader

TODO:
1. What should be done when sample names are duplicated?
I feel like you are paying a very heavy cost in complexity and maintainability for the sake of flexibility in memory layout -- these template metaprogramming tricks like std::enable_if() make the code a bit hard to follow, and (I suspect) hard to modify/maintain! Question is whether it's worth the cost -- ie., will we really ever use anything besides MergedVCFHeaderFieldsIdxLUT\<true,true,true,true\>? If not, I would vote to simplify the code by including only the implementation corresponding to MergedVCFHeaderFieldsIdxLUT\<true,true,true,true\> as a simple, un-templated VariantHeaderMerger class. But I will let @jmthibault79 weigh in on whether the alternate layouts could have practical value.

Note that if we do end up keeping the flexible memory layout, we will need test coverage for the various combinations of fields_forward_LUT_ordering, fields_reverse_LUT_ordering, samples_forward_LUT_ordering, and samples_reverse_LUT_ordering (currently are you only testing the true, true, true, true case)