Change UInt64Index._na_value from 0 to np.nan
#### Code Sample, a copy-pastable example if possible

```python
In [2]: pd.UInt64Index._na_value
Out[2]: 0
```
#### Problem description
The basic logic here is that `UInt64Index` should mimic `Int64Index`  in that it cannot hold na.  As it's currently defined, `UInt64Index` can hold it's `_na_value`, which brings about issues for internal code that uses `_na_value`.

Relevant discussion [here](https://github.com/pandas-dev/pandas/pull/18300/files/c1a090185aa91387791a9480d4ff2b984b09c19c#r151663365).

Simply making the change from 0 to `np.nan` breaks a couple tests, and brings to light an existing bug, so there's a little more work than just changing `_na_value`.  Will submit a PR shortly.