Validate arguments more completely.

Just some doc fixes, and moving argument validation down a layer to where they're really used.

Blocked by #1