Genotype: add convenience functions: snp, indel...

This is a tricky request from Louis which I anticipate to be a big hit
with the compbios. Everyone wants to query directly at the genotype what
kind of event it is. The problem is that doing so is expensive. One
should always strive to batch this kind of computation across all
samples using functionality like select_if or simple for_each loops.

However sometimes you want to just query one or two of these conditions
and it is nice to have such convenience functions. I strived here to
achieve as much performance as possible without increasing the state of
the Genotype object. To avoid string comparisons, all member functions
rely on an AlleleMask that pre-computes the string differences in the
alt/ref fields only once. All functions operate on key comparisons only.

Still, if you are going to use this for multiple comparisons such as:

```c++
if (genotype.insertion() || genotype.snp() && genotype.simple())
  do_something(genotype);
```

You will most likely be better off writing your own for loop instead of
paying for 3 passes on the data. But for quick queries in data with few
alleles (like diploids) this should be fine.

closes #204
Merge pull request #275 from broadinstitute/mc_snps_and_indels

Genotype: add convenience functions: snp, indel...
VariantBuilder
VariantBuilder code review round 2 update

-Addressed round 1 code review comments

-Enable move semantics when setting individual fields
 (allows for zero-copy bulk setting of a field for
 all samples at once)

-As a side effect of the above, setting individual fields
 by sample instead of in bulk is now supported. Uses
 short-value optimization to keep the per-sample values
 as contiguous as possible, but this option is still less
 efficient than setting in bulk.

-Significant refactoring to support the new move semantics
 and per-sample field setting:

    -split VariantBuilderDataField into VariantBuilderSharedField
     and VariantBuilderIndividualField

    -individual fields are now encoded at build time instead of
     at field set time; shared fields are still encoded upfront

    -to allow setting individual fields by nested vectors and
     by sample to compete with setting it by flattened vector,
     had to write a lot of low-level encoding routines to replace
     the former strategy of converting to flattened vector then
     handing off to htslib

Remaining TODOs:

-Fix issues with float missing/end of vector values (these are
 proving very problematic)

-Build-by-merge support (Joel indicated that this would be helpful
 for his use case, after all)

-More tests (now that Coveralls is working again, I can see the
 coverage gaps clearly)

-Doxygen comments / documentation
Fix bug with float missing / end of vector values

Apparently we can't use the htslib bcf_float_missing and bcf_float_vector_end
values directly -- need to copy them into local variables before use.
Fix bug in validation of vector lengths when setting individual fields

Previous validation routine would incorrectly allow nested vectors
whose first dimension was greater than but divisible by the number of
samples. Now validation of vector<vector> is separated from validation
of flattened vectors.
Improve test coverage, and fix issues found by new tests