gateone.py:  Pulled the code out of TerminalWebSocket.new_terminal() that adds all the callbacks to new multiplex instances and the terminal emulator and put it into its own function, TerminalWebSocket.add_terminal_callbacks().  This is both to make it easier to read as well as to make it easier to re-create callbacks when a terminals is relocated (more on that below).
gateone.py:  Added TerminalWebSocket.remove_terminal_callbacks() which does the opposite of add_terminal_callbacks().
gateone.py:  TerminalWebSocket instances will now keep track of themselves via a new 'instances' variable.  Instances will be added and removed whenever a WebSocket is opened or closed, respectively.  This will allow one instance to communicate with another (call its functions, change variables around, etc etc).  This was necessary to pave the way for moving terminals around, sharing them, and similar capabilities.
gateone.py:  Added TerminalWebSocket.move_terminal():  It will relocate a terminal from one 'location' to another.  If the new location doesn't exist (yet) it will be created and the next time the user opens https://<gateone server>/?location=<the location> it will be there waiting for them.  This function has been attached to the 'move_terminal' WebSocket action which can be called from the client.
gateone.js:  Modified how GateOne.prefs.prefix is set:  Instead of just being 'go_' (or whatever you set it to) it will now be 'go_' + location + '_'.  This is to prevent one browser tab's terminals from clobbering the localStorage values of another browser tab.
gateone.js:  Added a 3rd (optional) argument to GateOne.Terminal.closeTerminal():  *message*.  It will let you override the message that gets displayed to the user when the terminal is closed.  So instead of saying, "Closed terminal <term>" it will display whatever you want.  This is used by the new moveTerminalAction() function (see below).
gateone.js:  Added GateOne.Terminal.moveTerminalAction() which gets attached to the 'term_moved' WebSocket action.  It takes care of opening terminals that have been moved from one location (browser tab/window) to another.
gateone.js:  Added GateOne.Terminal.moveTerminalLocation():  It will move a given terminal from one 'location' to another by calling the 'move_terminal' WebSocket action on the server.
gateone.js:  GateOne.Terminal.reconnectTerminalAction() finally does something:  It will automatically call newTerminal() (and switch to it) for whatever terminal it is given.  This situation will only occur if 'new_terminal' is called on the Gate One server for a terminal that already exists; a situation that really only happens when you move a terminal to a location that's never been opened before...  It will be called for each terminal in the given location when the user connects to it for the first time.
Convenience Plugin:  Fixed some errors in the docu-comments.
termio.py:  Fixed a bad example in the docstring of remove_callback().
termio.py:  Multiplex.em_dimensions is now set at the beginning of Multiplex.spawn() instead of near the end.
A NOTE FOR FOLKS THAT READ THESE THINGS:  GUI elements to move terminals from one 'location' to another are next in the TODO.  I will also likely be adding a GUI element of some sort that tells the user what terminals are opened in all locations where you can move them around.  The goal is to give the user the following capabilities:  1) "Open this terminal in a new window", 2) "Move this terminal to a specific location", 3) "View a list of all open terminals" (quick switcher).