BUG: #10645 in using MultiIndex.__contains__
This PR fix a BUG #10645 
@sinhrks would you review my PR?

needs tests
 Thanks for mentioning about missing test. Just added. :)
 I revisit this issue and Yes, you're right @jreback I did further investigation and it seems a odd behavior of Cython. so this PR doesn't solve the issue.

I'd like to finish this issue. Do you have any idea with this? Anything would be appreciated.
 so the indexes have different behavior if > 1M elements on lookups. so that is a different path that is taken.
 This isn't Cython issue.

https://github.com/pydata/pandas/blob/master/pandas/index.pyx#L141-L148
If > 1M elements on lookups, `IndexEngine.get_loc()` do `_bin_search()` and try to `get_value_at()` the `loc`.
If the `loc` is equal to `len(values)` (like this error case), it looks ok to raise `IndexError` in `util.get_value_at()` because it means the `loc` is out of bounds.

So we should handle this `IndexError` somewhere.
IMHO, `get_loc()` itself has a 'key' parameter and if it fail key lookup, it's okay to raise `KeyError` here.

How's your thought? @jreback 
 This PR also fixes #10692 
@jreback Any comments would be appreciated.
 @ scari Gr8! Could you add test cases and release note for #10692? Then, pls squash to a single commit.
 this is not correct 
you are fixing a symptom not the problem
I don't think the indexer is setup correctly
 Okay. I'll take another look at this.
 @scari I'll submit a PR if you don't have time to come back to this. 
 replaced by #11049 
 @kawochen Thanks!
