VariantBuilder (for initial review)

this is perfectly fine as long as it doesn't outlive the builder.