API/ENH/DEPR: Series.unique returns Series
 I know this PR is too big, but I need it to initiate discussion before `v.0.24` cutoff.

I've been working on adding a `return_inverse` to `unique` since mid June (as fast as possible). I know that changing the return type of `Series.unique` is potentially a controversial issue, but I truly believe that this should be done for v.0.24 (as otherwise the behavior is locked in past 1.0 and who knows if it ever changes then).

IMO, it's even a necessity if pandas ever wants to support `return_inverse` for `unique`. Here's a few arguments from working on this for a while:

* This is both a long-standing issue (#4087 milestoned since 0.14) and *very* hard for a user to do any other way.
* `.unique` is the obvious place for an inverse (as opposed to `.duplicated`, which I was directed to work on first, #21645)
* An inverse for `Series` only works well if the return type of `Series.unique` is a `Series`, see https://github.com/pandas-dev/pandas/issues/22824#issuecomment-432841642. This is not even the strongest reason IMO to change the type, as `.unique` is a patchwork currently (see rest OP of #22824):
  * `Index.unique` is already an `Index` (and changing that back to `ndarray` would be equally disruptive, and wouldn't lead anyhwere re:reconstruction)
  * The current `Series.unique` already special-cases `Categorical` and (effectively) `DatetimeArray`.

The reason I'm pushing this WIP for discussion is that this is obviously needs a deprecation cycle, and I *really* think this should be part of `v.0.24`. I'm sorry for the late timing, but I've been working as fast as feedback speed allowed (as often as politeness allowed me to ping) - #21645 was lying around mostly finished for 2 month, the cython backend (#22986 / #23400) took about 2 months, and I haven't been able to get an answer at #22824 for about 5 weeks (e.g. @jorisvandenbossche seems to be very busy or simply not available)

As for the PR itself, I *only* wanted to change the return-type in this PR, but `Series.unique` touches several important paths:
1. `Series.unique`
1. `IndexOpsMixin.unique` and hence `Index.unique`
1. `Categorical.unique`
1. `EA.unique`

So, as a demo here, I've adapted the first three, and it's a separate issue that **the EA contract should support the possibility for `return_inverse`**. This is also something that should IMO needs to make it to `v.0.24`.

- [x] actually closes #4087 (milestoned since 0.14), makes several big steps towards #21357 / #22824
- [x] tests modified / pass
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
- [ ] this obviously still needs tests
- [ ] splitting this up could work as follows:
  - [ ] add `return_inverse` to `pd.unique`
  - [ ] add `return_inverse` to `Index.unique`
  - [ ] add `return_inverse` to `Categorical.unique`
  - [ ] add `raw` to `Series.unique`
  - [ ] **Alternatively**, I could avoid passing the `unique`-calls through class hierarchy and just directly call the cython methods from `Series.unique`, which would allow introducing the deprecation *without* introducing the `return_inverse` kwarg yet.