Ensure valid Block mutation in SeriesBinGrouper.
Closes https://github.com/pandas-dev/pandas/issues/31802

~This "fixes" #31802 by expanding the number of cases where we swallow an
exception in libreduction. Currently, we're creating an invalid Series
in SeriesBinGrouper where the `.mgr_locs` doesn't match the values. See
https://github.com/pandas-dev/pandas/issues/31802#issuecomment-595954511
for more.~

~For now, we simply catch more cases that fall back to Python. I've gone
with a minimal change which addresses only issues hitting this exact
exception. We might want to go broader, but that's not clear.~


cc @jbrockmendel & @WillAyd 
I could go either way. My long-term hope is to get away from using exceptions as control flow like this. I'm not sure whether `except Exception` gets us closer or further from that goal (probably further) but it does fix regressions. Per comment in #31082, would it be viable to check in libreduction before setting incorrectly-shaped block.values? I don't have a firm grip on when this occurs, but it seems like it should be any time you have a change in the group size. But I might be incorrect. https://github.com/pandas-dev/pandas/pull/32561/commits/ad746ba68752dbf0d398dbd7572efe702edd2657 changed things to also mutate the Block.mgr_locs in addition to the values, so the earlier discussion on what to catch is moot (as far as this PR is concerned). I think some unrelated (already merged in master) edits have snuck in Fixed the git snafu I think. Has anyone seen the 32bit failure elsewhere?

```
=================================== FAILURES ===================================
___________________ TestDataFrameAnalytics.test_stat_op_calc ___________________
[gw0] linux -- Python 3.6.7 /home/vsts/miniconda3/envs/pandas-dev/bin/python

    
        def kurt(x):
            from scipy.stats import kurtosis  # noqa:F811
    
            if len(x) < 4:
                return np.nan
            return kurtosis(x, bias=False)
    
        assert_stat_op_calc(
            "nunique",
            nunique,
            float_frame_with_na,
            has_skipna=False,
            check_dtype=False,
            check_dates=True,
        )
    
        # mixed types (with upcasting happening)
        assert_stat_op_calc(
>           "sum", np.sum, mixed_float_frame.astype("float32"), check_dtype=False,
        )

pandas/tests/frame/test_analytics.py:321: 

```

I guess https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=30468&view=logs&j=3a03f79d-0b41-5610-1aa4-b4a014d0bc70&t=4d05ed0e-1ed3-5bff-dd63-1e957f2766a9&l=74 had it on the npdev build. Is that a flaky test? > Has anyone seen the 32bit failure elsewhere?

Yes.  Best guess is #32571 caused this, am troubleshooting now