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`.

Was thinking about this last night and wondering if it might make sense to put a `timestamp = ...` property definition here? The part below where you say "If you now do ... `foo.timestamp = ...`" seems pretty magic since there is no connection between `foo.timestamp` (indeed, it's not even defined) and `MySpecialDateTimeProperty`. The question I'm left with is what is making that connection? How does `Foo.timestamp` need to be defined to be affected by that `Meta` block?