BUG: loc against CategoricalIndex may results in normal Index
Closes #11586.

After the PR:

```
import pandas as pd
index = pd.CategoricalIndex(list('aabbca'), categories=list('cabe'))
df = pd.DataFrame({'A' : np.arange(6,dtype='int64')}, index=index)

# OK (not changed)
df.loc[['a', 'b']].index
# CategoricalIndex([u'a', u'a', u'a', u'b', u'b'], categories=[u'c', u'a', u'b', u'e'], ordered=False, dtype='category')

# Fixed to return Categorical Index if value exists in categories
df.loc[['a', 'b', 'e']].index
# CategoricalIndex([u'a', u'a', u'a', u'b', u'b', u'e'], categories=[u'a', u'b', u'e'], ordered=False, dtype='category')

# raise KeyError otherwise (not changed)
df.loc[['a', 'b', 'x']].index
# KeyError: 'a list-indexer must only include values that are in the categories'
```

There are separate paths when `CategoricalIndex` values (codes) are unique and not-unique and both fixed.

Also, `.reindex` intentionally returns normal `Index` when passed values are not `Categorical`, I kept the behavior as it is. If `.reindex` can always return `CategoricalIndex`, above 2 separate fixes are not required (fixing `.reindex` to return `CategoricalIndex` should work both paths).

```
# return normal Index(not changed)
df.index.reindex(['a', 'b'])
# (Index([u'a', u'a', u'a', u'b', u'b'], dtype='object'), array([0, 1, 5, 2, 3]))

# return CategoricalIndex(not changed)
df.index.reindex(pd.Categorical(['a', 'b']))
# (CategoricalIndex([u'a', u'a', u'a', u'b', u'b'], categories=[u'a', u'b'], ordered=False, dtype='category'), array([0, 1, 5, 2, 3]))
```
