This allows proper fluent syntax to be used, e.g.
builder.Bind(..).To(..).WithKey(..).InSingletonScope()
as well as making it clear that they can't modify the container after
it's been created. Also means less documentation duplication between
interface and implementation...
Documentation needs fixing, and the exceptions will need looking at to
make sure they still give enough information.