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?