BUG: map builtins min/max to numpy/cython versions
closes https://github.com/pydata/pandas/issues/7722

```
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------
groupby_agg_builtins2                        |  43.8553 | 2667.0587 |   0.0164 |
groupby_agg_builtins1                        |  11.9447 | 118.6290 |   0.1007 |
```

on master:

```
In [4]: np.random.seed(27182)

In [5]: n = 100000

In [6]: df = DataFrame(np.random.randint(1, n / 100, (n, 3)),
   ...:         columns=['jim', 'joe', 'jolie'])

In [7]: %timeit df.groupby('jim').agg([sum, min, max])
1 loops, best of 3: 204 ms per loop

In [8]: %timeit df.groupby(['jim', 'joe']).agg([sum, min, max])
1 loops, best of 3: 5.1 s per loop

In [9]: df.groupby(['jim']).apply(max).head()  # this is broken
Out[9]: 
jim
1      jolie
2      jolie
3      jolie
4      jolie
5      jolie
dtype: object
```

on branch:

```
In [9]: %timeit df.groupby('jim').agg([sum, min, max])
10 loops, best of 3: 20 ms per loop

In [10]: %timeit df.groupby(['jim', 'joe']).agg([sum, min, max])
10 loops, best of 3: 74.6 ms per loop

In [11]: df.groupby(['jim']).apply(max).head()
Out[11]: 
     jim  joe  jolie
jim                 
1      1  999    989
2      2  997    986
3      3  981    973
4      4  989    992
5      5  995    977
```
