Throw validation errors instead of returning them

IMO this makes the design cleaner and easier to use.