User role dropdown

Closes #3402, Closes #3428

------------------



### Components
- Added `GhostSelectComponent` to handle async select creation (h/t @rwjblue)
- Added `GhostRolesSelector` (extends GhostSelectComponent) for displaying user role options
- Created `StoreInjector` for surgically inserting the store into things that normally wouldn't have them.
- InviteNewUserModal now uses GhostRolesSelector & defaults to Author (per 3428)

### User Model
- Added `role` property as an interface to getting and setting `roles`
- Refactored anything that set `roles` to set `role`
- isAdmin, isAuthor, and isEditor are all keyed off of `role` now

### Tests
- Added functional tests for Settings.Users
- updated settings.users and settings.users.user screens
- fix spacing on screens

### Server Fixtures
- Fixed owner fixture's roles
How could the store get an extra role in it? There's only 4 roles. I
thought it'd be fine to load them once per session and forget about it -
that's the beautiful thing ember data does for us: caching


On Wed, Jul 30, 2014 at 3:44 PM, Hannah Wolfe <notifications@github.com>
wrote:

> In core/client/components/gh-role-selector.js:
>
> > @@ -0,0 +1,16 @@
> > +import GhostSelect from 'ghost/components/gh-select';
> > +
> > +var RolesSelector = GhostSelect.extend({
> > +    roles: Ember.computed.alias('options'),
> > +    options: Ember.computed(function () {
> > +        var rolesPromise = this.store.find('role', { permissions: 'assign' })
> > +            .then(function (roles) {
> > +                return roles.rejectBy('name', 'Owner').sortBy('id');
>
> IMO, that's just a bug waiting to happen. If this is used for both
> inviting users AND the role drop down on the user profile, then it could
> display the wrong things if the store ever gets an extra role in it. Not
> just the owner role, but if the current user is an editor then the store
> will have the editor role, and whilst they can't see the dropdown on the
> profiles, they do have access to the invite user dropdown.
>
> It also means if we change the permissions for this, then the client side
> isn't honouring what the API is returning, and we have to update both all
> the time.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/TryGhost/Ghost/pull/3436/files#r15614512>.
>