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
doesn't matter, I was just curious if you *had* to change this.