Throw an exception object allocated once.  This is so that we generate less bytecode.
Implement several methods in terms of others.
More refactoring.
More refactoring.