PERF: improves SeriesGroupBy.nunique performance
closes https://github.com/pydata/pandas/issues/10820

on master:

``` ipython
In [2]: df = pd.DataFrame({'a': np.random.randint(10000, size=100000),
   ...:                    'b': np.random.randint(10, size=100000)})

In [3]: %timeit df.groupby('a')['b'].nunique()
1 loops, best of 3: 1.66 s per loop

In [4]: %timeit df.groupby(['a', 'b'])['b'].first().groupby(level=0).size()
10 loops, best of 3: 36.3 ms per loop
```

on branch:

``` ipython
In [2]: %timeit df.groupby('a')['b'].nunique()
10 loops, best of 3: 29.2 ms per loop
```

benchmarks:

```
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------
groupby_ngroups_10000_nunique                |   6.8550 | 1701.2453 |   0.0040 |
groupby_ngroups_100_nunique                  |   0.5283 |  18.2413 |   0.0290 |
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------

Ratio < 1.0 means the target commit is faster then the baseline.
Seed used: 1234

Target [091c73d] : PERF: improves SeriesGroupBy.nunique performance
Base   [54f02df] : COMPAT: value_counts always return int64 dtype, xref #10876
```
 @behzadnouri looks great. can you add a benchmark as well. ping when green.
 @jreback there already are 2 benchmarks
 oh, right, ok then.
 @behzadnouri thanks!
 That's awesome, sort of what I was thinking about but didn't have time to hack together :/ Thanks @behzadnouri!
