[Code Cleanup] Renamed a 'C4_' class to 'Cerb_'
[Code Cleanup] Refactored Devblocks to accept a session handler from the app.  This allows sessions to include app-specific information (e.g. worker_id).  This fixes a conceptual issue where Devblocks shouldn't know about Cerb.
* [CHD-2570] [Security/Who's Online] Fixed an issue where the "Who's Online" list doesn't display if the Suhosin extension is installed and session data is being encrypted.  Cerb no longer needs to decrypt sessions to list active workers.
* [CHD-2835] [Security] Disabling a worker's account now immediately ends all of their active sessions.
* [CHD-3289] [Security/Sessions/Setup] Admins may now view a list of all active worker sessions from Setup->Sessions.  This includes IP addresses and user agents (e.g. browser, OS, version).  Sessions may be force expired from the Bulk Update popup.
* [CHD-3288] [Security/Sessions/Preferences] Workers may now view their own list of active sessions from Settings->Sessions.  This displays IP addresses, browser, and operating system.  Sessions can be force logged out by using the Bulk Update button.
* [Web-API/Attachments] Files may now be uploaded through the Web-API and saved as attachments.  These may then be linked to various records.  Refer to the documentation for the '/attachments/upload' action.
* [CHD-3066] [Web-API/Mail/Compose] New mail may now be composed by using the Web-API.  This sends an email message to the recipients and creates a new ticket in Cerb.  File attachments, status, and custom fields may also be included.  Refer to the documentation for the '/tickets/compose' action.
[Code Cleanup] Abstracted the macros/menu_script.tpl template so that it can be used to draw other types of menus.
[Code Cleanup] CSS selectors and whitespace
[Code Cleanup] Refactored AbstractEvent_Message so the $group_id value is set based on the passed $message_id instead of explicitly.
[Code Cleanup] Macros pulled from DAO_TriggerEvent by owner now provide a 'has_public_vars' property.  This allows the UI to adapt based on whether it needs additional information from the worker before running the behavior.
[Virtual Attendants/Messages] AbstractEvent_Message can now store a pointer to a caller_actions array, which allows the behavior to return information to the caller.  The main way this is currently used is to pass jQuery scripts back to the caller so they can be included with the rendered HTML instead of executed during the behavior itself.
* [Virtual Attendants/Macros] Application-owned Virtual Attendant behaviors will now show up macro menus.
* [CHD-882] [CHD-3244] [Virtual Attendants/Mail/Reply] Implemented a new Virtual Attendant event point for '[UI] Before replying to a message'.  This allows behaviors that automate modifications to the reply form in the browser using jQuery actions.  For example, a group-owned behavior can set the default 'status' (e.g. open, waiting, closed) per group.  If the default status is 'waiting' the reopen date can be automatically set with intelligence, such as "+4 business hours", which accounts for evenings and weekends.  As another example, the 'custom fields' section can be hidden by default using a worker-level reply behavior, and made visible using another 'Show custom fields' behavior from the reply form in only the situations where it's needed.  Behaviors for this event may be owned by the app (global), roles, groups, or workers.
* [Mail/Reply/Usability] When replying to mail, the text box is no longer forced as the focused element.  This allows VA automation to move the cursor somewhere else (e.g. to the first blank line).
* [Virtual Attendants/Mail/Reply] Added a '[UI] While replying to a message' event point for Virtual Attendant behavior.  This makes user interface automation possible with macros that a worker can activate as-needed.  These actions can run custom jQuery code.  For example, during a reply a worker may want to automatically insert a summarized history of the current recipient's support history (e.g. reference number, subject, date, status).  This wouldn't be possible using snippets, but a VA behavior can build a worklist in a private behavior variable and then use the results as placeholders that output some text in the reply box.  A single macro can also: watch the conversation, add attachments, change the status, move the convo, assign it, and click the 'send' button.  'While replying' macros may be owned by the app (global), roles, groups, or workers.
* [Worklists/Export] The field names are now properly capitalized in the 'Export' action of worklists.
Merge branch '6.2.6' into 6.3
6.3-dev checkpoint