Categorical: preserve ints when NaN are present

`Categorical([1, np.nan])` would end up with a single `1.` float level.
This commit ensures that if `values` is a list of ints and contains np.nan,
the float conversation does not take place.
```
In[47]: np.nan in [np.nan, 1]
Out[47]: True
In[48]: np.nan in [2, 1]
Out[48]: False
```

Not sure what's faster: converting to numpy array and doing the `isnull(..).any()` check or the "is in list" check.