NEW TERMINAL SHARING API.  See notes for details...
Logging Plugin:  Took out the portions that were not specific to terminals and placed them in gateone.js.  Also, renamed what was left to GateOne.TermLogging.  This way the basic logInfo/logDebug/etc stuff will work even if the terminal logging plugin is not present.
app_terminal.py:  Added some logic that creates self.ws.persist['terminal'] inside of the initialize() function.  Primarily so things can stay a bit more organized.
app_terminal.py:  Replaced the use of the SHARED dict with self.ws.persist['terminal']['shared'] since that will actually work :)
app_terminal.py:  There are now several (working!) methods related to sharing terminals in TerminalApplication:  share_terminal(), unshare_terminal(), set_sharing_permissions(), list_shared_terminals(), and attach_shared_terminal().  Together they allow for any given terminal to be shared among a list of users, all users, or even anonymously (via a URL).  They also allow for other users write access and automatically restrict access via new policy functions (see below).  NOTE:  The anonymous sharing stuff (via URL) doesn't work yet due to the ShareHandler being incomplete (that's next).
app_terminal.py:  Added a policy function to determine whether or not a user may write to a given terminal (for sharing purposes):  policy_char_handler().  By default all users will have write access to their own terminals but for shared terminals users will have to be added to the "write" list.
app_terminal.py:  Added highest_term_num().  It returns the current highest terminal number so we know what's available.
gateone.py:  Fixed the bug where only the most recent open WebSocket was getting the proper events (strange things were happening).
gateone.py:  Added ApplicationWebSocket.send_user_message() and attached it to the 'go:send_user_message' server-side WebSocket action.  Sends the given message to all connected users that have a matching UPN (usually just the one but if AUTHENTICATED it will go to everyone).
gateone.py:  ApplicationWebSocket.send_message() now takes an optional keyword argument:  upn.  If given the message will be sent to all users with a matching UPN.  If upn=="AUTHENTICATED" then all users will get the message.
gateone.py:  Added ApplicationWebSocket.broadcast() and attached it to the 'go:broadcast' server-side WebSocket action.  It is just a shortcut for send_message(*message*, upn="AUTHENTICATED").
gateone.py:  Added a new classmethod to ApplicationWebSocket:  _deliver().  It will call write_message() for all instances of ApplicationWebSocket where the user matches a given *upn*.  It is how the new send_message() and broadcast() methods do their magic.  Should be very useful for some of the forthcoming applications and plugins.
gateone.py:  Added new 'gateone' policies and checking functions:  gateone_policies(), policy_send_user_message(), and policy_broadcast().  The first is a generic policy controller like terminal_policies in app_terminal.py.  The other two are specific to their respective functions and allow users to be restricted in whether or not they can send messages to other users.