Selections on an empty dataframe drop all columns
Here's an example:

``` python
In [1]: pd.DataFrame(columns=['a', 'b'])
Out[1]:
Empty DataFrame
Columns: [a, b]
Index: []
```

Right now, dropping a column works:

``` python
In [2]: df.drop('a', 1)
Out[2]:
Empty DataFrame
Columns: [b]
Index: []
```

But if I do a selection first, I'll be in trouble - selection returns an empty DF:

``` python
In [3]: df[df.b]
Out[3]:
Empty DataFrame
Columns: []
Index: []
```

If I've done the selection, everything breaks:

``` python
In [4]: df[df.b].drop('a')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-befe906574d9> in <module>()
----> 1 df.drop('a')

/Users/spencer/src/pandas/pandas/core/generic.pyc in drop(self, labels, axis, level)
    365                 new_axis = axis.drop(labels, level=level)
    366             else:
--> 367                 new_axis = axis.drop(labels)
    368             dropped = self.reindex(**{axis_name: new_axis})
    369             try:

/Users/spencer/src/pandas/pandas/core/index.pyc in drop(self, labels)
   1239         mask = indexer == -1
   1240         if mask.any():
-> 1241             raise ValueError('labels %s not contained in axis' % labels[mask])
   1242         return self.delete(indexer)
   1243

ValueError: labels ['b'] not contained in axis
```

Yeah, this actually comes up for me, particularly in scripts that have a series of steps like fetch data, stick it in a dataframe, munge it, and then do stuff. An example:

``` python
def fetch_data_from_external_api():
    raw_data = api.request(...)
    return pd.DataFrame(raw_data, columns=['timestamp', 'site_was_alive', 'val'])

def split_by_site_up(df):
    down = df[~df.site_was_alive].drop('site_was_alive', 1)
    up = df[df.site_was_alive].drop('site_was_alive', 1)
    return down, up

def get_data_and_split():
    df = fetch_data_from_external_api()
    down, up = split_by_site_up(df)
    down.val.plot()
```

Normally, this'll be fine. But what if the external api responds with an empty dataset for some reason? Or what if  `df[~df.site_was_alive]` is empty, because the site was always alive? It seems weird that this breaks because selections that return empty dataframes lose all the column metadata.  I have to write some ugly "if not empty" type code :(
