Improve validation messages

Validations were just throwing a stringified hash which did not help
the use of the gem.

Replaced validations with explicit checks and corresponding messages.
Added some missing specs.