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.

Some thoughts on the design here: we could add a class attribute `_possible_accessors` which corresponds to a set of all possibly accessors (e.g., `Series._possible_acccessors = set(['cat', 'str', dt'])`). Then we can have something like the following generic method defined on `PandasObject`:

``` python
def _dir_deletions(self):
    deletions = set()
    for accessor in self._possible_accessors:
        try:
            getattr(self, accessor)
        except AttributeError:
            deletions.add(accessor)
    return deletions
```
 @shoyer I like this idea! I noticed that there's already a `_accessors` attribute under `Series` though

```
_accessors = frozenset(['dt', 'cat', 'str'])
```

but it's not obvious to me how this is being used. 
 With regards to IPython auto-completion, this does seem trickier than I thought. Take a look at this example:

``` python
class A(object):
    something = 'asdf'

    def __dir__(self):
        return ['other']


class B(object):
    def __init__(self):
        self.something = 'asdf'

    def __dir__(self):
        return ['other']

a = A()
b = B()
```

Autocomplete on `a` still picks up `something`, even though we excluded it from `__dir__` (on `b`, it's excluded). I'm guessing IPython uses `dir(A)` somehow.... might be worth asking over there, since I'm pretty puzzled at this point :).
 Yes, looks like `_accessors` is probably the appropriate attribute to use then :). You'll have to do some searching to figure out how it's currently used.
 @shoyer updated to incorporate your suggestions, now using `self._accessors` 
@jreback updated to make use of the fact that `.str/.dt/.cat` are mutually exclusive
 lgtm

pls add a release note (use the pr number as the issue)
 LGTM, though you might test the built-in function `dir` directly instead of using `__dir__`
 @shoyer that makes sense, it's updated 
 OK, looks good to me! Please ping when it Travis is green.

Too bad this won't work for IPython auto-complete yet... but at least they're working on it.
 travis is green now

yeah I hope the IPython auto-completion will work soon
 thanks!
 great news - the issue has been closed on the IPython side, we should soon have the tab completion working 
