Add remaining models

We need to discuss this code. I'll make comments in the code, but a few general notes:

- Try to write more descriptive commit messages. When I rebase and I see you've changed a file without knowing why, it's hard to know which version is the "correct" one.
- Try to make more, smaller commits. For example, if you're adding rolify and it require taking out a join table definition, that's fine, but not it. If the changes you've made are unrelated to adding/removing something (like rolify), make a separate commit.
- It's especially important to mention why migrations are deleted.

We can't automatically merge this branch into master since there are so many conflicts. That largely unavoidable, but remember:

- When you start your days work, rebase against `master` to pull in any changes that have been committed there by others (just me at the moment). Also rebase against any published feature branches, since these may have changed as well.
- Smaller commits mean fewer conflicts. "Commit early and often".