ENH: Add Index.fillna
Closes #10089. 
- `value` can only accept scalar.
- `MultiIndex.fillna` raises `NotImplementedError` because `isnull` is not defined for MI.
- Moved `hasnans` and related properties to base `Index`.

Thanks, did the suggested changes. 

A test fails in `Series.fillna` which uses `DatetimeIndex.putmask`. Looks #11329 fixes the same part, I'm leaving it now.
 Rebased, and now green.
 Thanks, simplified the logic based on the comments.
 Thanks, updated based on the comments.
- `_convert_for_op` converts value for scalar op
- `assert_can_do_op` check whether the value is acceptable for scalar op 
  - timezone check is split to different method. Because it is used in list-likes such as `equals`.
- Some changes related to output detailed error messages / keep current messages 
 @sinhrks looks really good!

just a minor comment / question
 Reabsed, and now green.
 lgtm

merge when ready

thanks!

might want to add s short example in the Index docs (iirc where we go over Index set ops)
 Thanks. Added brief doc to `indexing.rst`. Merging within few days if there is no further comments.

CC: @jorisvandenbossche 
 @sinhrks Looks good! One more remark, doc-wise: I see there is a `downcast` keyword, but there is no example given of its usage in docstring or rst docs. That would be nice to include to clarify its usage I think.
 @sinhrks thanks!

always gr8 PR's from you!
 I don't see an entry in `API.rst` can you add?
 @jreback Ah, let me add it with #11537.
