TYP: PoC for honest ABC
PoC implementation for using honest ABCs for pandas objects. Currently only implements ABCNDFrame. Compare:

```
def foo(obj: ABCNDFrame):
    reveal_type(obj.attrs)


def bar(obj: ABCDataFrame):
    reveal_type(obj.attrs)
```

In this PR, mypy will output `Revealed type is 'builtins.dict[Union[typing.Hashable, None], Any]'` for the former whereas the latter is `Revealed type is 'Any'`.

A script can be written (and I plan to, if this idea gets buy-in) to generate the ABC class off of the concrete class. Likewise, tests can be written to ensure that ABCNDFrame and NDFrame don't diverge.

docstrings can be removed from the ABC class; I just wanted to highlight that we could just have the docs in the ABC class (don't know if that would be desirable).

cc @simonjayhawkins, @jreback, @jbrockmendel 