Implement some reductions for string Series
- [x] closes #31746, closes #18588
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
Just as a counterpoint do we really want to support all of these? `sum` in particular is strange to me to support on a string dtype The value of `sum` is certainly less clear, but I think `min`/`max` are nice to have?  > Just as a counterpoint do we really want to support all of these? `sum` in particular is strange to me to support on a string dtype

Agreed summing strings is a little odd, but is it worth implementing for the sake of consistency with Series of object dtype (for which this is a valid operation)? I don’t think consistency with object dtype is a goal for the string dtype. Even for min/max I’m not sure what those mean in a lot of cases, unless the answer is to fallback to Python semantics. 

My concern is I think that as an answer conflicts with the goal of creating a native string type > I don’t think consistency with object dtype is a goal for the string dtype. Even for min/max I’m not sure what those mean in a lot of cases, unless the answer is to fallback to Python semantics.
> 
> My concern is I think that as an answer conflicts with the goal of creating a native string type

Fair point about consistency not being important. I do think though that strings having an "order" to them is a pretty useful / natural concept (we'd probably want to allow sorting of strings, in which case we'd also want min and max) >  Even for min/max I’m not sure what those mean in a lot of cases, unless the answer is to fallback to Python semantics.

You can sort strings, and then min/max have a rather clear meaning IMO

But it's true we certainly don't need to do this for consistency with object dtype, but because we think it is useful 
(we only need to check / fix consistency between dataframe vs series operation) i would certain add operations that work now on object types - otherwise the dtypes won’t be used generally which is not great  More thoughts on adding `min`/`max` and/or `sum`. I would like to see min/max added, but care less about `sum`. moving this off 1.0.2 as this has raised some non-trivial to solve issues. if you want a bug fix out of this ok, but then this needs to decouple the issues. Going to close this for now since it looks to be quite a bit larger than I originally thought (seems like fixing nanmin / nanmax might be the right approach).

I'm not sure how best to implement this, but another idea might be to fill with an arbitrary non-NaN value from each array along the given axis before taking the min or max, then I think it should work for any dtype (although might be a little slower).