Refactor `syncer` into mixin for `BaseCollection`, `BaseModel`

This will make it easier to extend the functionality of `BaseModel` and
`BaseCollection`, and to do things like access properties of the `app`
in the various methods.
Merge pull request #138 from airbnb/syncer-mixin

Refactor `syncer` into mixin for `BaseCollection`, `BaseModel`