Permissions update

Old access level mechanism was not very elegant. This replaces how permissions are handled with a more extensible method of handling permissions. Also provides a method to manually assign someone permissions without worrying about house positions.

Database changes:
- New table `office_permissions`
- New table `user_permissions`
- Will remove `access_level` from `offices`
Will this always be the case in the future? The comment makes me a little wary that we might have a permission in the future that doesn't need the admin interface.

For sake of extensibility (since that's the purpose of this PR), maybe instead we can have a function `show_admin_for_permission`, which given a permission returns whether it is an admin permission. For now, we can have that function always return true. But it will make the helper code around permissions even more robust, since we can always change the function definition if we have permissions later on that don't need the admin panel.

So, we can add this to auth:

```
def show_admin_for_permission(permission):
    # Note: Update if future permissions don't need the admin panel.
    return True
```
and then replace this with:
```
session['show_admin'] = any(map(lambda permission: is_admin_permission(permission), permissions))
```

How does that sound?