BUG: preserve join keys dtype
- closes #8596, preserve join keys dtype
- adds `Index.where` method for all Index types (like `np.where/Series.where`), but preserves dtypes

ok, removed the dep on my other PR.

@sinhrks @jorisvandenbossche @TomAugspurger comments?
 @sinhrks any comments on this?
