Add container garbage collection.

Work in progress, will add unit tests this evening, assuming this looks ok.
Good point. My original thought is garbage collecting the oldest containers based on 3 rules 1) flag controlled time 2) cap of per UUID 3) cap of recent containers at GetRecentContainers during sync. But I guess ok with this for now since it only mess up with restart count, and it cannot be trusted anyway without the checkpoint.