Add container garbage collection.

Work in progress, will add unit tests this evening, assuming this looks ok.
inline `removeOpts`?