add/delete str/dt/cat dynamically from __dir__ (fix for #9627)
@jreback this PR makes it easier to add/delete items from `__dir__`. The `.str/.dt/.cat` are now only present in `__dir__` when they are appropriate types.

However, the IPython tab completion does not seem to only source the list from `__dir__`, and therefore even if an item is removed from `__dir__` it is still showing up in tab completion for me.

@shoyer I'd probably need some help/feedback with this. Here's a related ticket https://github.com/pydata/pandas/pull/9617 

Thanks.
