VariantBuilder (for initial review)

The idea was that the builder needs to take in arbitrary Individual/SharedField objects, and it needs to know whether they were encoded according to a header that is consistent with its own header. However, I've had second thoughts about this approach recently, and think I will probably alter the API to require the caller to pass the needed information in manually rather than sharing the header with these *Field objects. So, you can disregard this change.