BUG: fix Index.reindex to preserve type when target is empty list/ndarray
This PR fixes #7774 and also includes:

TST: check index/columns types when doing empty loc/ix tests

CLN: don't _ensure_index in NDFrame._reindex_axes, it is done in Index.reindex

Whoops, this PR is based on unmerged #8460 branch and shows two commits.
 pls close the incorrect one, and rebase
 ok rebase
  thanks.

the corner case with `s.reindex(iterator)` that made me add `_ensure_has_len(seq)` should have minimal impact, but I need to benchmark that. 
 looks good
ready to merge?
 FYI: https://github.com/pydata/pandas/commit/bc6a1f79963bdee03b0fd770a80b013c56743da3

the `np.int_` types don't compare correctly on windows (as they are 32-bit by default)
 Oh, I never get win32 right :)
 haha, its a beast!
