REF: make BaseOffset a cdef class
@jreback i could use help here with one last stubborn pickle/pytables test `test_read_py2_hdf_file_in_py3`

Within this legacy file we have the substring (sub-bytes?) 

`blob = b"ccopy_reg\n_reconstructor\np1\n(cpandas.tseries.offsets\nBusinessDay\np2\nc__builtin__\nobject\np3\nNtRp4\n(dp5\nS'normalize'\np6\nI00\nsS'n'\nI1\nsS'kwds'\np7\n(dp8\nsS'offset'\np9\ncdatetime\ntimedelta\np10\n(I0\nI0\nI0\ntRp11\nsb."`

AFAICT it is doing `pickle.loads(blob)` and getting:

```
>>> pickle.loads(blob)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/copyreg.py", line 43, in _reconstructor
    obj = object.__new__(cls)
TypeError: object.__new__(BusinessDay) is not safe, use BusinessDay.__new__()
```

Then it is falling back and for reasons not clear to me is calling `to_offset(blob)` which raises `ValueError` which is what pytest shows us.

IIUC there is a way to register functions for unpickling, but _none_ of the functions in pd.compat.pickle_compat are getting called in this process, so I'm at a loss for how to do this.  Any ideas?
you can figure out what you need to patch by monkey patching the unpickler itself

and stepping thru

it’s going to be one of the dist instructions i think (i did this a number of years ago so don’t remember much more) > you can figure out what you need to patch by monkey patching the unpickler itself

Very tentative, but it looks like we can make a context to temporarily patch pickle to use the Unpickler in compat.pickle_compat during calls to `HDFStore.get` Booyah green ok will have another look, pls rebase updated; npdev failure is unrelated AFAICT rebased+green > ok i understand, can you add some comments here to that effect

updated+green
 very nice