> I think it's supposed to do just that, be used instead of Index/Series/DataFrame directly so these can be subclassed and methods will respect subclassing.

This is exactly what seems strange to me: I usually use `self.__class__` or `type(self)` if I need a base class method to recognize it can be subclassed, but OTOH looking at how `_constructor` is implemented in `Series` it appears to *seal* class hierarchy (unless you override it in derived class) and the whole point of this is unclear to me.