Tightened up documentation and contracts for the Container hierarchy,
plus fixed a few things which I derped when switching to using NO_STACK
objects.

Also, I've decided to switch to throwing a NullPointerException instead
of an IllegalArgumentException for invalid null method parameters, and
this is reflected in changes in this commit. However, I'm yet to update
the rest of the codebase.