PERF: casting loc to labels dtype before searchsorted
Intrigued by the profiling results of the below example (Multi-index `loc` indexing, based on the example in https://github.com/pandas-dev/pandas/issues/14549), where `searchsorted` seemed to take the majority of the computation time. 
And it seems that `searchsorted` casts both inputs (in this case `labels` and `loc`) to a common dtype, and the `labels` of the MultiIndex were in this case `int16`, while `loc` (output from `Index.get_loc`) is a python int.

By casting `loc` to the dtype of `labels`, the specific example gets a ca 20 x speed improvement

```
df = pd.DataFrame({'a': np.random.randn(500*5000)}, index=pd.MultiIndex.from_product([date_range("2014-01-01", periods=500), range(5000)]))
dt = pd.Timestamp('2015-01-01')
%timeit df.loc[dt]
```

On master:
```
In [3]: %timeit df.loc[dt]
The slowest run took 5.70 times longer than the fastest. This could mean that an intermediate result is being cached.
100 loops, best of 3: 9.39 ms per loop
```

with this PR:
```
In [3]: %timeit df.loc[dt]
The slowest run took 122.51 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 422 µs per loop
```

Just putting it here as a showcase. 
Actual PR probably needs some more work (other places where this can be done, can loc ever be out of bound for that dtype?, benchmarks, ..)
