REF: SingleBlockManager dont subclass BlockManager
Instead, most of BlockManager becomes _BlockManager which is subclassed by SingleBlockManager and BlockManager, the latter holding only the 2d-specific BM methods.

Motivation: putting BlockManager constructor in cython gives a much bigger gain if we can define `__cinit__`, and we can't do that with the two subclasses having mismatched `__init__` signatures.