Attempt to support pickling

I've added __reduce__, __setstate__, and __getstate__ methods.  None
of them seem to be enough to enable pickling, as discussed in issue