(PUP-3555) Override-able cache expiration service

This commit introduces an override-able cache
expiration service for directory environment cache
entries.  A caller may provide a custom implementation
of the expiration service, and it will receive
callbacks whenever a cache entry is created,
checked for expiration, or evicted.