Allow for subclasses of Invalid to be raised by validators.

In response to #70, some changes here will prevent subclasses of `Invalid` raised by validators from being re-written as `Invalid`s