REGR: missing vals not replaceable in categorical
- [x] closes #40472
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

This restores behavior to before the regression, but I think also deprecating this behavior while patching might be reasonable. Since categoricals represent all missing values the same way, this allows unintuitive behavior like
```
ser = pd.Series([None, "b"]).astype('category')
ser = ser.replace({np.nan: 'c'})
print(ser)
```

replacing the missing value even though `None` and `np.nan` are different missing values. Forcing usage of the more explicit `fillna` seems more reasonable in this case.