VariantBuilder (for initial review)

For exactly the reason given in the comment: "we need to distinguish between the case where the user explicitly sets one of these to a missing value vs. the case where the user doesn't touch a field at all."

This will be necessary in build-by-merge mode when the user wants to overwrite the value in the starting record with a missing value.