BUG: Patch rank() uint64 behavior
Adds `uint64` ranking functions to `algos.pyx` to allow for proper ranking with `uint64`.

Also introduces partial patch for `factorize()` by adding `uint64` hashtables and vectors for
usage. However, this patch is only partial because the larger bug of non-support for `uint64`
in `Index` has not been fixed (**UPDATE**: tackled in #14937):
~~~python
>>> from pandas import Index, np
>>> Index(np.array([2**63], dtype=np.uint64))
Int64Index([-9223372036854775808], dtype='int64')
~~~

Also patches a bug in `UInt64HashTable` from #14915 that had an erroneous null condition that was caught during testing and was hence removed.

Note there is overlap with #14934 with the implementation of `is_signed_integer_dtype` and `is_unsigned_integer_dtype`.  That PR should be merged before this one.