SyncedVariantReader/Iterator

Also some variant_reader_test cleanup
A shallow copy here would destroy the memory when the new Variant goes out of scope.

What I can do is copy all of the headers at initialization time, and pass those around by index as appropriate.