SyncedVariantIterator now outputs "sparse" Variant vectors

Depends on #377 - will rebase after that is merged
Possibly it would be more efficient to use fill assignment (`Vector::assign(size_type n, const value_type& val)`) to initialize the vector to empty variants, instead of creating a brand-new vector (and destroying the old one) on every call to `fetch_next_record()`