Remove raw pointers from Sam Readers/Iterators and Sam/Variant Writers

Additional work on #195

Waiting on #213 to add move construction/assignment tests
Also, you're not factoring in the destruction -- if the parameter is by-value, then it must be destroyed when you leave the constructor, even if its internals have been moved into the member variable. Passing by reference avoids this extra destructor call.

So, we have for lvalues: 1 copy in the pass-by-reference case vs. copy, move, destroy in the pass-by-value case.