Improve DataFrame.select_dtypes scaling to wide data frames
Running select_dtypes for a variety of lengths.

```python
import numpy as np
import pandas as pd
from timeit import default_timer as tic

ns = [0, 10, 100, 1_000, 10_000]
times = []

for n in ns:
    df = pd.DataFrame(np.random.randn(10, n))
    t0 = tic()
    df.select_dtypes(include='int')
    t1 = tic()

    times.append([t1 - t0])

df = pd.DataFrame(times, columns=['include'], index=ns)
df.plot()
```

This looks O(n) in the number of columns. I think that can be improved (to whatever set intersection is)

![gh](https://user-images.githubusercontent.com/1312546/64439889-91b5f580-d090-11e9-9a69-c613aedcbe07.png)

Edit: maybe it's O(log(n)), I never took CS :)