[IFRT] Cache the hash of `DeviceList`
[IFRT] Cache the hash of `DeviceList`

This change makes `xla::ifrt::DeviceList` cache its hash value once it is
computed. This makes it fast to compare two `DeviceList`s if they are created
from two different sources.

This is a part of the change that will enable the user of `DeviceList` build their
own cache to store runtime-specific attributes for the devices.
