Remove raw pointers from Variant Readers and Iterators

Partial completion of #195

Additional cleanup/testing of move/copy constructors/assignment in Variant Readers and Iterators

TODO for 195:
- similar work on Sam and other classes
- change shared_ptr to unique_ptr
the old test should still work, doesn't it?