API: Allow ordered=None in CategoricalDtype
- [X] closes #18790
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

For equality comparisons with `ordered=None`, I essentially treated it as if it where `ordered=False`:

  - `CDT(['a', 'b'], None) == CDT(['a', 'b'], False)` --> `True`
  - `CDT(['a', 'b'], None) == CDT(['b', 'a'], False)` --> `True`
  - `CDT(['a', 'b'], None) == CDT(['a', 'b'], True)` --> `False`

This maintains existing comparison behavior when ordered is not specified:
  - `CDT(['a', 'b'], False) == CDT(['a', 'b'])`  --> `True`
  - `CDT(['a', 'b'], True) == CDT(['a', 'b'])`  --> `False`
<br />

I didn't make any code modifications in regards to hashing, so `CDT(*, None)` will have the same hash as `CDT(*, False)`.  This seems to be consistent with how equality is treated.  Makes the logic implementing equality nicer too, since the case when both dtypes are unordered relies on hashes.