Custom formats

Implementation of #128 
It contains all commits in #131 and starts from the extracted format attributes.
Details:
- custom formats are registered by passing in the keyword, a proc that will receive the data for validation and an array of version names for which the format is to be registered
- on failed validation, the proc should raise a JSON::Schema::CustomFormatError with the message that should be used to indicate the violation
- formats are only validated if the property has the expected type
- default formats can be overridden and will be restored on deregistration

Missing: I should probably add some example in the Readme to explain its usage.