Fixes T6569. This implements an expiry mechanism for Drydock resources which parallels the mechanism for leases.
A few things are missing that we'll probably need in the future:
- An "EXPIRES" command to update the expiration time. This would let resources be permanent while leased, then expire after, say, 24 hours without any leases.
- A callback like shouldActuallyExpireRightNow() for resources and leases that lets them decide not to expire at the last second.
- A callback like didAcquireLease() for resource blueprints, to parallel didReleaseLease(), letting them clear or extend their timer.
However, this stuff would mostly just let us tune behaviors, not really open up new capabilities.