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 
This is a big change.  Why not just put in dtypes.generic

```
class ABCNDFrame:
    pass
```

and then "honestly" have NDFrame subclass that? The idea here is to allow mypy to be aware of method signatures when doing e.g. `isinstance(obj, ABCNDFrame)`. I believe this is only possible by copying the signatures of the methods of `NDFrame` into `ABCNDFrame`.

The diff will go down dramatically if docstrings are removed. I removed docstrings to make the diff easier to understand. related issue #27353

> 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.

stubgen can generate stub files automatically. 

I think we should maybe investigate creating stub files in the first instance, see https://github.com/pandas-dev/pandas/issues/27353#issuecomment-526391462

These may need to be manually curated in the first instance. But I think using stubgen could reduce the need for custom scripts and checks longer term. @simonjayhawkins Thanks for the comments and links. Using cast on the ABCs did not occur to me, even if we decide not to go with stubs it seems clear to me that cast is a better solution than what is being done here.