In order to intelligently schedule incoming calls, we need to know what identity it falls under.
We do this by defining the Schedulable interface, which has one method, getIdentity(IdentityType idType)
The scheduler can then query a Schedulable object for its identity, depending on what idType is.
Call 1: Made by user=Alice, group=admins
Call 2: Made by user=Bob, group=admins
Call 3: Made by user=Carlos, group=users
Call 4: Made by user=Alice, group=admins
Depending on what the identity is, we would treat these requests differently. If we query on Username, we can bucket these 4 requests into 3 sets for Alice, Bob, and Carlos. If we query on Groupname, we can bucket these 4 requests into 2 sets for admins and users.
In this initial version, idType can be username or primary group. In future versions, it could be jobID, request class (read or write), or some explicit QoS field. These are user-defined, and will be reloaded on callqueue refresh.