Basic user role management

This PR aims to add role management on a user by user basis, which will support application wide permissions for users.

TODO:

- [x] Add `RoleDecorator` for decorating system role names to friendly names
- [x] Add `RoleProvider` for providing an array of all available roles in the application
- [x] Add `RoleFormType` for editing roles
- [x] Update `UserFormType` so that it supports role management 
- [x] Restrict role management to roles only available to the user doing the editing (make the others read-only)
- [x] Add a `DataTransformer` which re-adds the readonly roles so that a user does not lose roles when saving (test added, just needs feature code)
- [x] Fix role data in the view, currently it is showing roles as granted when they aren't