Type configs

This is a modest restructuring that makes all of a JsonObject subclass's type inferences configurable. It's done like this

```python
class MyJsonObject(JsonObject):
    class Meta(object):
        # this replaces the default DateTimeProperty with your custom one
        # you can also completely override all properties from scratch with
        # properties = {...}
        update_properties = {datetime.datetime: MyBetterDateTimeProperty}
```

Now, in a `MyJsonObject` subclass, you'll still be able to have `DateTimeProperty`s, but in the case of a dynamic property (one that you didn't specify in the schema) it will now default to using `MyBetterDateTimeProperty`.

One possible approach to avoid accidental reverse conversion of strings would be to store a list of the fields that were dynamically converted along with a hint about the reverse conversion procedure. Then when the object is loaded from the db that information can be used to do the reverse conversion. Maybe that's too much overhead though? (although given that it's running every string through a sequence of regexes on load...)