VariantBuilder (for initial review)

It's to allow the string and int cases to be collapsed into single templated functions.