NOTE: Thanks to CyberShadow (https://github.com/CyberShadow) for many of the bug fixes incorporated into this commit!
app_terminal.py:  Changed the hard-coded path to the session dir to %SESSION_DIR%.
utils.py:  Instead of using a pre-defined list of keyword arguments, cmd_var_swap() has been modified to use a more ambiguous **kwargs.  This will allow it to swap out *any* variable.  Note that the keyword arguments will be converted to uppercase before being swapped.  So `cmd_var_swap(cmd, session=somevar)` is functionally equivalent to `cmd_var_swap(cmd, SESSION=somevar)`.  This will enforce the use of UPPERCASE in 'commands'.
gateone.py:  Fixed a number of locations in the code using /opt/gateone/settings instead of options.settings_dir.
gateone.py:  Fixed a bug with emptying Tornado's cache when the cache path is something other than '.'
gateone.py:  Fixed a bug sending WebSocket action arguments that resolve to False such as 0 or an empty list.  It will now explicitly check for None.
gateone.py:  Fixed a bug where cleanup_user_logs() was not taking command line arguments into consideration when determining the location of logs and their maximum allowed age.
gateone.py:  Changed the default for the 'send_broadcasts' policy from True to False (i.e. default deny).
gateone.py:  Added a new classmethod:  ApplicationWebSocket._list_connected_users().  It lists the (authenticated) users currently connected to the Gate One server.
gateone.py:  Added ApplicationWebSocket.list_server_users() and an associated policy-checking function (policy_list_users()--checks the "list_users" policy setting).  Together they provide a mechanism for a client to retrieve a list of connected users for things like sharing terminals.  This functionality is attached to the 'go:list_users' WebSocket action.  An additional policy setting has been created for this that controls what attributes a user may view (of another user): user_list_fields.  So if you were using Google auth you could say, allow users to view each other's email addresses by setting "user_list_fields": ['upn', 'ip_address', 'email'] (by default only upn and ip_address are visible--a user's session ID is off-limits for security reasons).
gateone.py:  Added support for SHA256, SHA384, and SHA512 to Gate One's API authentication.
app_terminal.py:  Fixed an AttributeError that could occur on exit.
app_terminal.py:  Fixed usage of hard-coded /tmp/gateone path instead of using the session_dir.
terminal.js:  Fixed a bug in newTerminal() where it was (locally) overwriting the global 'v' variable (which represents GateOne.Visual).
terminal.js:  You can now spawn terminals with different commands via a query string parameter in Gate One's URL: https://gateone.company.com/?terminal_cmd=SSH (support for GUI selection of various commands is next).
gateone.js:  Modified GateOne.Utils.getQueryVariable() slightly:  It now takes an optional *url* parameter which, if provided, will be used instead of window.location.
utils.py:  Added a new function to replace the use of tornado.web._create_signature():  create_signature().  It's just like Tornado's function except it supports multiple algorithms.