Rework special-object APIs. The new API is a bit more general-purpose, is more tolerant of throws, and is better documented.