Bug in set_labels of MultiIndex
```python
import pandas as pd
                                 
idx = pd.MultiIndex.from_tuples([(0, i) for i in range(130)])
print idx.labels[1].dtype  
# --> int16
idx.set_labels(labels=idx.labels[1], level=1, inplace=True) 
print idx.labels[1].dtype  
# --> int8
```

Imho this is caused by the following line, because the erratic assumption that the indices of `labels` and `self.levels` would be index-aligned.
https://github.com/pandas-dev/pandas/blame/master/pandas/core/indexes/multi.py#L331
Hence the call to `coerce_indexer_dtype` casts the given `labels` to int8. This is because its l'ooking at the number of categories in level 0.

I would suggest to replace 
```python
            for l, lev, lab in zip(level, self.levels, labels):
                new_labels[l] = _ensure_frozen(
                    lab, lev, copy=copy)._shallow_copy()
```
with
```python
            for l, lab in zip(level, labels):
                lev = self.levels[l]
                new_labels[l] = _ensure_frozen(
                    lab, lev, copy=copy)._shallow_copy()
```
