Add container garbage collection.

Work in progress, will add unit tests this evening, assuming this looks ok.
move `5` to a constant?