ABCGeneric instance checking is broken
So, my issue was that pandas was throwing an error (about not having implemented `_constructor`) when I tried to use a custom object as a label for a column in `DataFrame`, even though that object's class was not a part of the pandas hierarchy. After some digging I have realized that pandas thinks this object is an instance of `ABCGeneric`, which I eventually tracked down to https://github.com/pydata/pandas/blob/master/pandas/core/common.py#L111, where it can be seen that any object implementing a `_data` attribute is considered an instance of `ABCGeneric`.

The simplest code to recreate the issue is this:

``` python
import pandas

class Foo(object):
    _data = None

foo = Foo()

df = pandas.DataFrame({foo: [1,2,3,4,5]})

df[foo]
```

This is clearly broken, as (like in my case) there are perfectly legitimate cases when other, non-pandas objects might have a `_data` attribute. Also, at least in this particular case `_data` is not the only item required from the object, as obviously it needs a `_constructor` as well. I would recommend changing this implementation either not to rely on the presence of `_data` only, or even better to look for an actual superclass, or, possibly the best, to use duck typing instead of relying on `isinstance`.
