BUG: Empty CategoricalIndex fails with boolean categories
Fixes #22702.

This bug was introduced in [7818486859d1aba53](https://github.com/pandas-dev/pandas/commit/7818486859d1aba53ce359b93cfc772e688958e5); per [my comment](https://github.com/pandas-dev/pandas/issues/22702#issuecomment-421364087), the problem is here:

```python
    if not is_dtype_equal(values.dtype, categories.dtype):
        values = ensure_object(values)
        categories = ensure_object(categories)

    (hash_klass, vec_klass), vals = _get_data_algo(values, _hashtables)
    (_, _), cats = _get_data_algo(categories, _hashtables)
```

When `categories` is `Index([True], dtype='object')` and `values` is `array([], dtype='object')`, the `ensure_object` call is bypassed, but in `_get_data_algo`, an `Index` consisting entirely of boolean objects will be coerced to `uint64`, which violates the assumption that `values` and `categories` have the same dtype.

I felt that retrieving the underlying numpy arrays (if any exist) is the safest way to handle this without having too many wide-reaching effects across the rest of the codebase, but there might be a better way to enforce that these are not coerced into different data types.

- [x] closes #xxxx
- [x] tests added 
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
