WIP: Refactor accessors, unify usage, make "recipe"
xref #14781, #16890

There are currently accessors for `dt`, `str`, `cat`, and `plot`.  These are each constructed in different ways and using slightly different naming conventions, turning a fairly simple underlying logic into a bit of a maze.  This goals for this PR are to:

- Document a recipe for users to create custom accessors.  This now boils down to "subclass PandasDelegate".
- Unify the ways in which these accessors are constructed, including clarifying naming conventions.
- Keep never-directly-used methods like `_make_dt_accessor`, `_make_cat_accessor` out of the `Series` namespace.
- Avoid injecting names into existing namespaces.


The biggest simplification (and the main change in logic) is in where the `_make_foo_accessor` is defined.  Under the status quo, this looks roughly like:

```
    def _make_foo_acessor(self):
        [validation that self is foo-like]
        return FooDelegate(self)

    foo = AccessorProperty(FooDelegate, _make_foo_acessor)
```

This PR changes that, so that `_make_foo_accessor` is now a classmethod `_make_accessor` of `FooDelegate`.  Then in `Series` all we need is `foo = AccessorProperty(FooDelegate)`.


At the moment the documentation/recipe is in the form of an example in the module docstring to `core.accessors`.  Not sure where that belongs.  I'm not wild about the going back-and-forth between code that is copy/paste-able and ">>>" interludes.  `test_accessors` is a bare-bones copy of that example with some assertions.


 - [ ] closes #xxxx
 - [ ] tests added / passed
 - [x] passes ``git diff upstream/master -u -- "*.py" | flake8 --diff``
 - [ ] whatsnew entry
