Improve validation methods

Executing validate() will return a hash of errors and validate!() will
raise a ConfigurationError exception.