Support cross-host `device_put` for a few new cases.
This change newly supports `jax.device_put(x, d)` when `d` is a device and not a sharding, and `x` is a Numpy array or a committed JAX array (uncommitted JAX arrays are still unsupported). This requires modifying `PyArray::BatchedDevicePut` to take a list of destination devices, because it's no longer true that the destination devices are the same as the addressable devices in the destination sharding. Additionally, the single-device shards passed to `PyArray::BatchedDevicePut` may not be addressable (e.g. if `x` is a non-addressable JAX array).
This change also adds test coverage and support for batched cross-host transfers where `x` is a list of Numpy arrays, since the change to `PyArray::BatchedDevicePut` enables this as well.
PiperOrigin-RevId: 860197771