Read grouped Zarr datasets

It would be very nice to be able to read, with cf.read, Zarr datasets that contain a group hierarchy.

#863 implemented the reading of Zarr datasets, but only those with no group structure (i.e. only the root group).

Zarr v2 (xarray-style) and Zarr v3 will be supported.

This will almost entirely implemented in cfdm (NCAS-CMS/cfdm#355), and inherited from there.