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

Wow, great catch. You're right that it doesn't "matter" in this case, because two python "oddities" cancel each other out: (1) string-type prefixes only apply to the first in a multiline concatenation (ok I mean that makes sense) (2) "\d" is silently treated as two characters "\\d" for any character that isn't part of an escape sequence, while "\n" is a single character. So the loosey-gooseyness of (2) obscured (1) and hasn't been causing an error.