Change UInt64Index._na_value from 0 to np.nan
Prerequisite for #18300

- [X] closes #18398
- [X] closes #18400
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

Summary:
- Changed `UInt64Index._na_value` from 0 to `np.nan`

- Added a `dtype` parameter to `_try_convert_to_int_index` to skip the initial attempt to coerce to `Int64Index` in cases where we really want `UInt64Index` (fix for #18400).

- Moved `test_where` and `test_where_array_like` from `TestInt64Index` to the `NumericInt` base class for more generic coverage, and forced it to check that things get coerced to `Float64Index`.  The way it was originally written raised a ValueError due to the 0 -> `np.nan` change.