DictField: Allow None to be used as a default
Implement validation of fields

This change is backwards incompatible because it requires that all fields
without a default be present. Fetching any field that doesn't have a default
will raise an AttributeError. Validating the presence and correct types for all
fields can be done explicitly by calling ``validate``.

This function will also check for unrecognized fields and raise an exception
for these fields unless it has been configured not to do so.