Drop fails when supplied with an object that implements __getitem__
When you supply `drop` with an item that implements `__getitem__`, `drop` doesn't drop it. It does when supplied with the item within a list.

That's because instead of checking `is_list_like` ([here](https://github.com/pydata/pandas/blob/master/pandas/core/common.py#L2329)), `drop` calls `_index_labels_to_array` which does [this](https://github.com/pydata/pandas/blob/master/pandas/core/common.py#L2023). That returns an empty list when supplied with an object that implements `__getitem__`. (if you want the technicals, that's because `list(obj) == []`, as `__getitem__` used to be the way of implementing iteration. `is_list_like` ignores that case, I think correctly).

Should `_index_labels_to_array` instead call `is_list_like`?

``` python
In [182]:

class GetItemObj(object):

    def __init__(self, n):
        self.n = n

    def __getitem__(self, item):
        if item == 'a':
            return self.n
        else:
            raise IndexError

    def __hash__(self):
        return self.n

    def __repr__(self):
        return 'Item: {}'.format(self.n)
In [183]:


index=pd.Index([GetItemObj(i) for i in range(2)])
index
Out[183]:
Index([Item: 0, Item: 1], dtype='object')
In [186]:

index.drop(index[0])
Out[186]:
Index([Item: 0, Item: 1], dtype='object')
In [187]:


index.drop([index[0]])
Out[187]:
Index([Item: 1], dtype='object')
```
