Replace numpy string aliases for numpy 2.0 compatibility
Replace numpy string aliases for numpy 2.0 compatibility

NumPy 2.0 removes the aliases np.string_ (for np.bytes_) and np.unicode_ (for np.str_) to enforce a single way to access string data types.

All instances where np.string_ and np.unicode_ are used in TF have been updated. 

Note that, internally, tf.string is now mapped to np.bytes_ to align with NumPy 2.0's changes. However, the public-facing TensorFlow types tf.string remains unchanged as it does not have duplicate naming issues, so it is probably not worth updating its name.

See https://numpy.org/devdocs/numpy_2_0_migration_guide.html#changes-to-namespaces and https://numpy.org/doc/stable/reference/arrays.scalars.html#numpy.string_.

FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/openxla/xla/pull/12896 from openxla:cleanup 32ded36419a4a1b2177a6374846497a8bb458ac9
