Allow labels argument to DataFrame.drop to be a function
Allow `labels` to be a function that is applied to each label on the `axis` and return `True` if that label is to be dropped.

For example:

```
df = pd.DataFrame({'a':[1],'B':[2],'c':[3]})
df.drop(labels=lambda x:x.lower()==x, axis=1)
```

would drop columns 'a' and 'c'

This would be consistent with `DataFrame.rename` taking a function for `index` or `columns`.
