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
I know it's beyond this commit, but could you make this constructor explicit?