VariantBuilder (for initial review)

hey, the builder needs a ton of state, there's no way around it :)