BUG: Categorical.__setitem__ allows for tuple assignment
- [x] closes #20439 
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Pretty straightforward fix in the `__setitem__` method

While I was looking into this, I discovered a bug that does not allow for the creation of mixed-dtype Categoricals, if the first element is not a tuple. Should I create an issue?

```console
In [20]: s = pd.Categorical([('a', 'a'), ('a', 'b'), ('b', 'a'), 'c'])

In [21]: s
Out[21]:
[(a, a), (a, b), (b, a), c]
Categories (4, object): [(a, a), (a, b), (b, a), c]

In [22]: s = pd.Categorical(['c', ('a', 'b'), ('b', 'a'), 'c'])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-22-0f4b5f338532> in <module>()
----> 1 s = pd.Categorical(['c', ('a', 'b'), ('b', 'a'), 'c'])

~/Documents/siv-dev/projects/open-source/pandas/pandas/core/arrays/categorical.py in __init__(self, values, categories, ordered, dtype, fastpath)
    328             # _sanitize_array coerces np.nan to a string under certain versions
    329             # of numpy
--> 330             values = maybe_infer_to_datetimelike(values, convert_dates=True)
    331             if not isinstance(values, np.ndarray):
    332                 values = _convert_to_list_like(values)

~/Documents/siv-dev/projects/open-source/pandas/pandas/core/dtypes/cast.py in maybe_infer_to_datetimelike(value, convert_dates)
    893     if not is_list_like(v):
    894         v = [v]
--> 895     v = np.array(v, copy=False)
    896
    897     # we only care about object dtypes

ValueError: setting an array element with a sequence
```