Add support for extensions.

Extensions are additional fields that can be fetched. For instance:

```
user = Schema(...)

@user.extension('stats')
def stats(item, fields):
    return dict()
```

If the user is fetched with the field `stats`, it will return the user object with
a `stats` key on it.