TST in .drop and .groupby for dataframes with multi-indexed columns
## Bug 1 [edit: issues #11640 and #12078, fixed by PR #12158 but not entirely tested]

There was a bug deeply hidden in `pandas/core/index.py`, where it was assumed that the `.get_loc` method of an index would only return an integer or a slice, while it can also return a mask.

Simply correcting that bug has two consequences:
- now for a dataframe `df` with multi-indexed columns, `df.drop('a', axis=1)` works if `df['a']` returns something, e.g. if the column `('a', '')` exists
- likewise, `df.groupby('a')` also works in that case

Example:

```
In [2]: df = pd.DataFrame(columns=['a','b','c','d'], data=[[1,'b1','c1',3], [1,'b2','c2',4]])

In [3]: dg = df.pivot_table(index='a', columns=['b','c'], values='d').reset_index()

In [4]: dg
Out[4]: 
b  a b1 b2
c    c1 c2
0  1  3  4

In [5]: dg['a']
Out[5]: 
0    1
Name: a, dtype: int64

In [8]: dg.drop('a', axis=1)
Out[8]: 
b b1 b2
c c1 c2
0  3  4

In [9]: dg.groupby('a').mean()
Out[9]: 
b b1 b2
c c1 c2
a      
1  3  4
```
## Bug 2 [edit: #11741, solved by PR #12063]

I also correct a little bug I mentioned in the talk on issue #11640: `.groupby` failed to raise a `KeyError` for a non-existing column when there was only one row:

```
In [6]: dg.groupby('z').mean()
Out[6]: 
b  a b1 b2
c    c1 c2
z  1  3  4
```

Now we do have:

```
In [4]: dg.groupby('z').mean()
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
...
KeyError: 'z'
```
