Migrate the SerDes logic for basic IFRT API object types from IFRT Proxy to IFRT
Migrate the SerDes logic for basic IFRT API object types from IFRT Proxy to IFRT

This CL migrates the (de)serialization logic from IFRT Proxy to IFRT for basic
IFRT object types (`DType`, `Shape`, `DeviceList`, `Sharding`). Most of them
are absorbed into IFRT types, implemting `FromProto` and `ToProto` methods. One
exception is `Sharding`, which needs further refactoring to avoid cyclic
dependency and exposing deserialization support functions to broad `Sharding`
users.

This migration defines standardized and easy-to-access (de)serialization for
IFRT API users, similar to other runtime data structures (e.g., XLA
`ShapeProto`/`OpSharding`).
