BUG: Fix issue with apply on empty DataFrame
Fixes a bug where the return value for certain functions was hard-coded as `np.nan` when operating on an empty `DataFrame`.

Before
```python
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(columns=["a", "b", "c"])
>>> df.apply(np.sum)
a   NaN
b   NaN
c   NaN
dtype: float64
>>> df.apply(np.prod)
a   NaN
b   NaN
c   NaN
dtype: float64
```

After
```python
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(columns=["a", "b", "c"])
>>> df.apply(np.sum)
a    0.0
b    0.0
c    0.0
dtype: float64
>>> df.apply(np.prod)
a    1.0
b    1.0
c    1.0
dtype: float64
```

**Edit**: Closes #28202 and closes #21959 after https://github.com/pandas-dev/pandas/pull/28213/commits/cb68153f4b6fca19440ec6b79a0d1128c002ec11.  The issue was that the arguments of `self.f` were already unpacked here:
https://github.com/pandas-dev/pandas/blob/cb68153f4b6fca19440ec6b79a0d1128c002ec11/pandas/core/apply.py#L112
and then we tried to do this again inside `apply_empty_result` which was raising an error and causing the unusual output.