Add container garbage collection.

Work in progress, will add unit tests this evening, assuming this looks ok.
Prefer to leave the original error.  fmt.Errorf is an anti-pattern as it creates errors that are very hard to reason about programatically.