Avoid throwing an exception to handle validation errors

Great library, but I noticed you were throwing an exception for validation errors, which is a bit of a code smell.

http://c2.com/cgi/wiki?DontUseExceptionsForFlowControl