Refactor Container to delegate operations to an internal class.

A Container that exists will be backed by an ExistingContainer; one that does
not will be backed by a NullContainer. Containers are a little lazier about
things like fetching metadata.

This lets me implement delete() properly, along with always providing a
consistent interface, and not forcing clients to check exists() everywhere.
Delegate deletion to self.internal like the other operations.
Implement delete_if_necessary, like create_if_necessary.
Delegate object manipulation methods to the internal Container.