[Requirement #10449] - The system shall allow an administrative user to log out another user

Made some simplifications, and some other changes for consistency:
 * Merged the UserSessionAdminService into the UserAdminService, and simplified the implementation a bit by removing some unnecessary error handling.
 * Changed UserSessionManagementComponent to be more consistent with how other similar app components are designed.  The button to Terminate selected sessions is now on the toolbar above the table.
 * Implemented many resharper suggestions.
[Requirement #10447] - The system shall limit the number of users who can be simultaneously logged in according to the terms of the license

As a pre-requisite to implementing this TR, introduced an extension point for inserting additional service interceptors into the interception chain.
[Requirement #10447] - The system shall limit the number of users who can be simultaneously logged in according to the terms of the license

Added a field to the InitiateSessionResponse to provide warning messages to be presented to the user.
Merge
[Requirement #10448] - The workstation shall allow the currently logged in user to log out, leaving the application running for another user to log in

 * Moved the Logout function into the Team SessionManagerTool class, alongside the ChangePassword function.
 * Moved both menu items under the File menu (debatable whether this is the right place, but it's an improvement over their prior menu locations).
 * Action model needs to be updated to reflect these changes.
[Defect #10318] - Unable to delete empty partition when study count is negative

Discovered that the mechanis to turn on/off the delete button for the server
partition page did not work properly after the first page of partitions.  It would
enable/disable the button based on the order of the records on the first page
on all the other pages.
Merge
[Requirement #10433] - The Report Editor will allow the radiologist to modify the priority of the Order
 * Calling ChangePriority on the reporting context with a value of 0 will cause priority to cycle to the next valid value.
 * Calling ChangePriority now causes the UI to update.
[Requirement #10433] - The Report Editor will allow the radiologist to modify the priority of the Order
 * Added bindable commands for changing priority to the dictator report editor.
[Requirement #10258] - The workstation shall include a Simple Order Entry screen, launched from calendar view

 * Added a new property to WorkflowSettings: AllowUnscheduledProcedures, which is false by default.
 * OrderEditorComponent now has a validation rule to enforce that procedures are scheduled if this setting is false.
 * The "Requested Scheduled Time" field is now hidden as long as the setting is false, because it is not useful (and in fact it is confusing) if the procedures are scheduled immediately.
[Requirement #10447] - The system shall limit the number of users who can be simultaneously logged in according to the terms of the license

Deleted all of the old "Session Count" stuff that is no longer used.
[Requirement #10447] - The system shall limit the number of users who can be simultaneously logged in according to the terms of the license

The code for reporting the number of sessions in use was not distinguishing between active and expired sessions (this was a longstanding issue in previous team edition releases).  Fixed by:

 * added a User.ActiveSessions property that returns only those sessions that have not expired.
 * used the ActiveSessions property in place of the Sessions property where appropriate
 * added a batch-size to the NHibernate mapping to ensure decent performance on the summary screen, which includes a roll-up of the number of sessions for each user.
[Requirement #10449] - The system shall allow an administrative user to log out another user

Made a bunch of improvements to allow the application to handle the situation where it's current session has been killed remotely by an admin.
 * Added an ISessionManager.InvalidateSession() method, which essentially marks the current session as invalid, requiring the user to have to re-authenticate in order to continue using the application.
 * Added a Desktop.Application.InvalidateSession() method, which exposes this functionality publicly to the application.
 * Adjusted one of the RIS exception policies so that it calls InvalidateSession().
 * Ris.Client.SessionManager does not yet implement InvalidateSession(), since it isn't required for the current project.

The net effect is that, if a RIS user tries to execute a command when their session has been terminated by an admin, they are simply shown a login screen and can re-enter their password and continue working.
Merge