ENH: Support operators for ExtensionArray
- [x] closes #20659, #19577, #20825
- [x] tests added / passed
  - pandas/tests/extension/decimal/test_decimal.py
    - Tests for operators using existing operator tests for fundamental types
  - pandas/tests/extension/json/test_json.py
    - Create an `__add__` method for json and test it, make sure others fail
  - pandas/tests/extension/category/test_categorical.py
    - Adds a `test_combine` method
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
  - Not included since I'm not sure if it is v0.23 or v0.24, and I wasn't about to start a v0.24 whatsnew

### Some Notes

- @jorisvandenbossche suggested that I put up an initial implementation for review, so I expect there will be lots of suggestions for doing it more, better, or different.
- There is a hook in there that is untested, where if an implementer (like me) wants to have the logical operators not return a `Series` with `bool`, they can do that.  I'm testing it with my library, but once we agree on this basic implementation, I will add tests for that specific use case.
- The idea is that you first see if the `ExtensionArray` class has implemented the operator.  If not, then you just go element by element.