Migrate specialized Variant Reader tests to their own files
Merge pull request #377 from broadinstitute/jt_vr_test_cleanup

Migrate specialized Variant Reader tests to their own files
VariantBuilderMultiSampleVector: simple class to make it easier to prepare multi-sample data for VariantBuilder

Made the efficient one-dimensional vector option for setting individual fields MUCH easier
to use by providing a VariantBuilderMultiSampleVector class that handles the work of
setting missing values and padding the vector to the maximum field width.

To use, first determine the number of samples and the maximum number of values per sample
for the field, then get a pre-initialized vector from the builder. Eg.,

auto multi_sample_vector = builder.get_integer_multi_sample_vector(num_samples, max_values_per_sample);

This vector will have missing values for all samples, with appropriate padding to the maximum field width.

Then, fill in the values for each non-missing sample by invoking the set_sample_value() and/or
set_sample_values() functions on your multi-sample vector (set_sample_value() is more efficient
than set_sample_values() since it doesn't require a vector construction/destruction for each call).
You don't have to worry about samples with no values, since all samples start out with missing values.

Finally, pass your multi-sample vector to the builder (ideally by move):

builder.set_integer_individual_field(field_index, std::move(multi_sample_vector));

-Works with integer and float individual fields, as well as the GT field
 (string fields are still set by passing in a one-dimensional vector of strings).

-Removed the ability to pass in a raw one-dimensional vector directly for int/float
 fields -- you must use a VariantBuilderMultiSampleVector if you want to work
 with flattened multi-sample data.

-Updated tests as necessary.

Resolves #325
Merge pull request #378 from broadinstitute/dr_vb_flattened_vector_helper_functions

VariantBuilderMultiSampleVector: simple class to make it easier to prepare multi-sample data for VariantBuilder
SyncedVariantIterator now outputs "sparse" Variant vectors
- one element for each input file
- use missing() to check that the Variant is from an input file with a variant
- necessary to tie the Variant vector back to the original inputs
Merge pull request #379 from broadinstitute/jt_sparse_SVI

SyncedVariantIterator now outputs "sparse" Variant vectors
Fix for signed/unsigned comparisons (by Karthik)
Merge pull request #382 from broadinstitute/jt_unsigned

Fix for signed/unsigned comparisons (by Karthik)
Encode genotypes automatically in VariantBuilder instead of requiring the client to call Genotype::encode_genotype()

-VariantBuilder genotype setters now call appropriate Genotype::encode_genotype() function for you.

-Updated tests/documentation accordingly.

-Added some additional move semantics to per-sample genotype setters to allow clients to avoid extra copies
 when they don't need to re-use their genotype data.

-Added disclaimers to Genotype::encode_genotype() functions that they should only be called directly
 if you are working with low-level BCF data, and not when using VariantBuilder.

-Specifying phasing is still an issue, but will be addressed separately in #373

Resolves #371
Merge pull request #383 from broadinstitute/dr_vb_auto_encode_genotypes

Encode genotypes automatically in VariantBuilder instead of requiring the client to call Genotype::encode_genotype()
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?
Edits based on suggestions by Joel and David
1. VariantHeaderMerger accepts both shared_ptr<bcf_hdr_t> and
VariantHeader& as inputs. To do this, VariantHeaderMerger
is now a friend of VariantHeader so that m_header can be directly
accessed.
2. Created two VariantHeaderMerger variants optimized for two different
purposes
  a. InputOrderedVariantHeaderMerger - fast traversal of all fields for
a single input VCF
  a. FieldOrderedVariantHeaderMerger - fast traversal of all input VCFs
for a single field
Created more rigorous tests
3. Use static const int members instead of #define
4. Use different VCFs with different headers in the tests
5. Store shared_ptr<bcf_hdr_t> within VariantHeaderMerger. Use raw
pointers only when needed
6. Added a get_input_vcf_headers() function for MultipleVariantReader
7. Missing values in VariantHeaderMerger are now represented by
bcf_int32_missing instead of -1
8. Made validate_header() private in MultipleVariantReader again.
1. Moved MergedVCFLUTBase<> inside utils namespace
2. Return "" if bcf_hdr_int2id() returns nullptr in get_field_name(),
get_sample_name() in VariantHeader
3. Better comments for MergedVCFLUTBase and VariantHeaderMerger
4. Removed custom missing() functions - use gamgee::missing() only
5. Merged VCF header resides inside VariantHeaderMerger. It is
constructed using add_header(), add_headers()
functions. A const reference can be obtained by using
get_merged_header().
6. All get_*_lut() functions are now const
7. Use default destructor
8. Check to ensure all test paths for test cases for VariantHeaderMerger
(see variant_header_merger_test_path_counters)
1. Edited code dealing with field-idx to user defined enum in
VariantHeaderMerger. Another LUT stores the mapping (instead of vector).
Updated comments with information about how to use this feature
2. Added test case for field-enum mapping
1. Created functions get_raw_merged_header() and get_merged_header() in
VariantHeaderMerger
2. Move constructor, = for VariantHeaderMerger - disable deep copy
constructor, =