Use built-in Error class for failures

AssertionError was not providing a full stack trace or appropriate
messages. Throwing basic Errors provides both.