Introduce ifrt::Device and ifrt::Memory abstractions.
Introduce ifrt::Device and ifrt::Memory abstractions.

Previously ifrt::Device and ifrt::Memory were aliases for PJRT objects. But in general IFRT should not require the use of PJRT under the hood, and IFRT should define its own types.

This change introduces the new types and migrates users to refer to them.
