WIP/ENH: add weights kw to numeric aggregation functions
closes #10030
alt to #15031

```
 In [5]: df = DataFrame({'A': [1, 1, 2, 2],
   ...:                'B': [1, 2, 3, 4]})

In [6]: df
Out[6]: 
   A  B
0  1  1
1  1  2
2  2  3
3  2  4

In [7]: df.mean()
Out[7]: 
A    1.5
B    2.5
dtype: float64

In [8]: df.mean(weights='A')
Out[8]: 
A    0.416667
B    0.708333
dtype: float64
```

New signatures
```
In [9]: Series.mean?
Signature: Series.mean(self, axis=None, skipna=None, level=None, weights=None, numeric_only=None, **kwargs)
Docstring:
Return the mean of the values for the requested axis

Parameters
----------
axis : {index (0)}
skipna : boolean, default True
    Exclude NA/null values. If an entire row/column is NA, the result
    will be NA
level : int or level name, default None
    If the axis is a MultiIndex (hierarchical), count along a
    particular level, collapsing into a scalar
weights : str or ndarray-like, optional
    Default 'None' results in equal probability weighting.

    If passed a Series, will align with target object on index.
    Index values in weights not found in the target object
    will be ignored and index values in the target object
    not in weights will be assigned weights of zero.

    If called on a DataFrame, will accept the name of a column
    when axis = 0.

    Unless weights are a Series, weights must be same length
    as axis of the target object.

    If weights do not sum to 1, they will be normalized to sum to 1.

    Missing values in the weights column will be treated as zero.
    inf and -inf values not allowed.
numeric_only : boolean, default None
    Include only float, int, boolean columns. If None, will attempt to use
    everything, then use only numeric data. Not implemented for Series.

Returns
-------
mean : scalar or Series (if level specified)
File:      ~/pandas/pandas/core/generic.py
Type:      function
```