API/BUG: type of scalar aggregations
Currently there is some inconsistency around the scalar type returned from a `Series` aggregation, both in terms of whether it is a numpy or python type, as well as different behavior for an empty `Series` - see table below.

Normally this isn't a big deal as the numpy types mostly behave like the python type, but can be an issue with serialization, which is where I ran into this.

Is the desired behavior to make all of these python types?

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>function</th>
      <th>type</th>
      <th>type_empty</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>sum</td>
      <td>&lt;class 'float'&gt;</td>
      <td>&lt;class 'int'&gt;</td>
    </tr>
    <tr>
      <td>mean</td>
      <td>&lt;class 'float'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>median</td>
      <td>&lt;class 'float'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>count</td>
      <td>&lt;class 'numpy.int32'&gt;</td>
      <td>&lt;class 'numpy.int32'&gt;</td>
    </tr>
    <tr>
      <td>var</td>
      <td>&lt;class 'float'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>std</td>
      <td>&lt;class 'float'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>sem</td>
      <td>&lt;class 'numpy.float64'&gt;</td>
      <td>&lt;class 'numpy.float64'&gt;</td>
    </tr>
    <tr>
      <td>nunique</td>
      <td>&lt;class 'int'&gt;</td>
      <td>&lt;class 'int'&gt;</td>
    </tr>
    <tr>
      <td>prod</td>
      <td>&lt;class 'numpy.float64'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>min</td>
      <td>&lt;class 'numpy.float64'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
    <tr>
      <td>max</td>
      <td>&lt;class 'numpy.float64'&gt;</td>
      <td>&lt;class 'float'&gt;</td>
    </tr>
  </tbody>
</table>

Code for table
```python
fxs = ['sum', 'mean', 'median', 'count', 'var', 'std', 'sem',  'nunique', 'prod', 'min', 'max']
s = pd.Series([1., 2., 3.])
s_empty = pd.Series([], dtype='f8')
data = []

for f in fxs:
    row = dict(function=f)
    res = getattr(s, f)()
    row['type'] = type(res)
    res = getattr(s_empty, f)()
    row['type_empty'] = type(res)
    data.append(row)

pd.DataFrame(data).to_html(index=False)
```