Add @throws Javadoc to public API

Add input validation to public API where needed
Add support for message args to exception classes