PERF: faster dir() calls
I experience slow tab-completion in iPython, so I've optimized `dir` calls in pandas, e.g.

```python
>>> n = 100_000
>>> ser = pd.Series(['a'] * n]
>>> %timeit dir(ser)
3.73 ms ± 34.7 µs per loop  # master
253 µs ± 4.3 µs per loop  # this PR
```

It does this by caching the output for the info axis, when the info axis may have string, and returning an empty set for info axes that cannot have strings (numeric indexes etc.)

The above didn't actually improve the subjective speed of tab completion for me, so the problem there probably is in Ipython, but the change in this PR can't hurt either.
thanks @topper-123 