Implement a batched version of `Array::GetReadyFuture()`
Implement a batched version of `Array::GetReadyFuture()`

Some IFRT implementations may be able to provide a more efficient `GetReadyFuture` implementations if they can see multiple arrays at a time, e.g., IFRT Proxy. `Client::GetReadyFuture({array})` is expected to have the same semantics as `array->GetReadyFuture()`.

IFRT Proxy is updated such that the changes are forward and backward compatible. If a newer IFRT Proxy client connects to an older IFRT Proxy server that does not support `Client::GetReadyFuture()`, the client falls back to `Array::GetReadyFuture()`. Also, the proto explicitly uses non-packed fields to maintain version compatibility.
