Based a Genotype class on VariantFieldValue

With a couple GT specific operators, including separating out the alleles.

Heavily based off htslib and comment stream in #77.
Also, it appears to me that you *shouldn't* be using the default copy constructor/assignment operator. When doing a copy, you need to make a deep copy of m_body using the appropriate utils functions: utils::make_shared_variant(utils::variant_deep_copy(other.m_body.get()))

The move constructor/assignment operator can be the defaults, but they need to be explicitly defined as = default.