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