BUG: conversion of uint64 to float when taking
https://github.com/pandas-dev/pandas/pull/15245/commits/62fe71e8465d2876f8687731cd2275b3d46d5a6b#r100575113

```
# master
In [1]: pandas.core.algorithms.take_nd(np.array([0, 1], dtype='uint64'), np.array([0, -1]))
Out[1]: array([  0.,  nan])

# with this change above
In [5]: pandas.core.algorithms.take_nd(np.array([0, 1], dtype='uint64'), np.array([0, -1]))
Out[5]: array([                   0, 18446744073709551615], dtype=uint64)
```

mainly need some more testing w.r.t. this (e.g. ``pandas.types.cast._maybe_promote``).