OSDMaps can occupy significant space in memory. Duplicating OSDMaps
across cores would multiply that memory usage as well as complicate
the internal structure sharing we do when applying OSDMap incrementals.
Because PeeringState and other interfaces expect efficient copying of
OSDMapRef objects we don't want to use foreign_ptr directly.
Instead, maintain a single cache and distribute local_shared_foreign_ptrs
to other cores. ShardServices becomes the only OSDMapService.