Better validation of bad data (no warnings)

This branch also makes all errors call `confess()` for consistency (and to make our lives easier when debugging!)