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`
That's actually why I added `Permissions.Admin` as another permission, which directly controls whether or not the admin interface should be shown. 

If we wanted to otherwise keep track of which permissions require use of the admin interface, then it might be better to scrap all of this and keep track of things in the database instead?