BUG: Index.where casting ints to str
- [ ] closes #xxxx
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Two things going on here (can separate if asked, but they got mixed together in the process).

1) don't re-raise in `DatetimeLikeIndexMixin.where`, so we end up giving the more standard exception message.
2) Use validate_fill_value in Index.where, and have that disallow strs for numeric.  This fixes the following in master:

```
>>> idx = pd.Index(range(3))
>>> mask = np.array([True, False, True])
>>> 
>>> idx.where(mask, "2")
Index(['0', '2', '2'], dtype='object')
```
