BUG: Groupby(sort=False) with datetime-like Categorical raises ValueError
Closes #10505.

Fixing `Categorical.unique` to return unique `Categorical`. Would like to confirm the expected behavior based on current impl.
- unordered category: values and categories are sorted by appearance order, excluding unnecessary ones.
- ordered category: values are sorted by appearance order, categories keeps existing order excluding unnecessary ones.

```
import pandas as pd
import numpy as np

# unordered
cat = pd.Categorical(["b","b","a","a"], categories=["a","b","c"])
cat.unique()
# [b, a]
# Categories (2, object): [b, a]

cat = pd.Categorical(["b", "b", np.nan, "a"], categories=["a","b","c"]) 
cat.unique()
# [b, a]
# Categories (2, object): [b, a]

# ordered
cat = pd.Categorical(["b","b","a","a"], categories=["a","b","c"], ordered=True)
cat.unique()
# [b, a]
# Categories (2, object): [a < b]

cat = pd.Categorical(["b", "b", np.nan, "a"], categories=["a","b","c"], ordered=True) 
cat.unique()
# [b, a]
# Categories (2, object): [a < b]
```

Looks `groupby` needs some logic for `Categorical(ordered=True)` and `sort=False`.
 the uniques should not have `nan` in them. Further I think the `ordered=True` should order according to the categories (e.g. the present ones), this might be a small API change.
 Ah, correct. Fixed and updated the example above.

I understand `groupby` result must follows the same rule as above. It means `groupby(Categorical(ordered=True), sorted=False)` will have the index sorted by the order of categories, was previously ordered by appearance of values (unsorted).
 > uniques should not have nan

I have misunderstand this with `value_counts`. Currently, `unique` returns array including `NaN` both normal and categorical.

```
pd.Series([1., 2., 1., np.nan]).unique()
# array([  1.,   2.,  nan])
pd.Series([1., 2., 1., np.nan], dtype='category').unique()
# array([  1.,   2.,  nan])
```

So, the fixed categorical result should preserve `NaN` in codes and not in categories as below? 

```
>>> pd.Series([1., 2., 1., np.nan], dtype='category').unique()
# [1, 2, NaN]
# Categories (2, float64): [1, 2]
```
 lgtm. merge when ready.
 Thanks, let me merge this once rebase and gets green.
