Adds customizable validation messages

Hardcoding the validation message makes it difficult to customize. It also overrides the required validation message.

I've modified the `clean()` method to mimic the default clean method, except that it doesn't call `to_python()` until after the initial `validate()` call.

The validation message is moved to `default_error_messages` under the code `invalid`.