Expunge the copy-then-move idiom

closes #256 and make @droazen happy.
variant_header shared ptr should be passed by reference here as well, though, since the reference count already gets incremented when we construct the VariantIterators in the constructor body.