BUG: make `mean()` raise an exception for strings
- [x] closes #44008 
- [x] closes #36703
- [x] closes #34671
- [x] closes #22642 
- [x] closes #26927 
- [x] closes #13916
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

This PR makes `mean()` raise an exception when `sum()` returns a string. Sum performs as expected since it concatenates. However `_ensure_numeric` causes implicit conversion of `str` to a numeric datatype
https://github.com/pandas-dev/pandas/blob/f3f90c33966e3ba334c459ad89d607f820caa1f8/pandas/core/nanops.py#L694
Instead of this, the return value of `sum()` will be checked and if it is a string, an exception will be raised. 
This  is a breaking change.