TERMINAL BROADCASTING WORKS.  Almost done with all shared terminal functions...  Just need to add an interface for viewing a list of shared terminals so you can pick one to join.
core/utils.py:  Modified `mkdir_p()` so that it will output the path that was attempted to be created if an exception is encountered.
termio.py:  Changed the message that gets logged when .golog logs are finalized so that the full path to the log is included.
async.py:  Fixed a cosmetic bug where you could get `AttributeError: "'NoneType' object has no attribute 'collect'"` exception messages when a MultiprocessRunner instance was shut down.
auth/authorization.py:  Removed the line that closes the WebSocket inside of `authenticated()` when a user fails the check.  There's many reasons why an authenticated check might fail but that doesn't mean an immediate disconnect is necessary (i.e. for broadcast terminals).
core/server.py:  Added printing of the PERSIST global to the debug WebSocket action.
core/server.py:  The PERSIST global has been moved to the __init__.py so that it can be imported by RequestHandlers.
core/server.py:  Removed the `authenticated()` check from `ApplicationWebSocket.log_message()` and added an explicit authentication check at the top of the function instead.  This is to prevent a zillion error messages about denials being logged when an unauthenticated user has their client set to debug logging.
core/server.py:  Fixed a bug in `ApplicationWebSocket._deliver()` where it would throw a TypeError exception for every unauthenticated user that's connected (mostly cosmetic).
core/server.py:  Removed the `authenticated()` requirement for the `ApplicationWebSocket.set_location()` function so that anonymous things like broadcasts can work with locations.
core/utils.py:  Added a new `random_word()` function that returns a random English word from a short list of around ~10,000 words.
app_terminal.py:  Added `self.log_metadata` placeholders to `TerminalApplication.__init__()` and `TerminalApplication.initialize()` so that plugins won't get AttributeError exceptions trying to reference that value before `authenticate()` gets called.
app_terminal.py:  Removed the `authenticated()` check from `TerminalApplication.terminals()`, `TerminalApplication.set_title()`, `TerminalApplication.get_locations()`, `TerminalApplication.opt_esc_handler()`, `TerminalApplication.bell()`, `TerminalApplication.mode_handler()`, `TerminalApplication.refresh_screen()`, `TerminalApplication.full_refresh()`, `TerminalApplication.get_font()`, and `TerminalApplication.set_terminal()` since it isn't necessary for any of those methods and was interfering with broadcast terminals.
app_terminal.py:  Made some changes to the terminal sharing API.  Nothing is final yet.
app_terminal.py:  Created `TerminalApplication.send_client_files()` which takes the code that sends the client CSS/JS files out of the `authenticate()` function.  A bit of code cleanup and also made this change to support broadcast terminals (which need to work without authentication).
applications/terminal/templates/share.html:  Loads of changes to make it actually work.
applications/terminal/policy.py:  Loads of changes to add support for restricting access to shared terminals.
Terminal CSS:  Added loads of stylesheet stuff for the new terminal sharing dialogs and widget(s).
terminal.js:  LOADS of changes to terminal sharing.  It actually works now!  Even broadcasting works.  Tip:  If you want to join to a shared terminal *right now* before I have the last pieces of the GUI in place you can just run `GateOne.Terminal.attachSharedTerminal(<share ID>)` in your JS console.
gateone.js:  Added a check for `GateOne.prefs.authenticate` (which defaults to true) before performing authentication inside of `GateOne.Net.connect()`.  This is to enable things like terminal sharing broadcasts where users will need to connect to the Gate One server without authenticating.
gateone.js:  Fixed a few places here and there that were calling things in embedded mode when they shouldn't.
gateone.js:  Added a checks to `GateOne.Storage.dbObject.put()` and `GateOne.Storage.dbObject.get()` to ensure the database is up and running before we attempt to get/put data from/into it.
gateone.js:  Added logic to detect whether or not 'showTitle' or 'showToolbar' were explicitly set in addition to 'embedded: true' if those options are passed to `GateOne.init()`.  This way you can use embedded mode and still show the title/toolbar if you want by simply providing those settings like so:  `GateOne.init(embedded: true, showTitle: true)`.  It will now detect this situation and adhere to the given prefs.
gateone.js:  Modified `GateOne.Visual.newWorkspace()` and `GateOne.Visual.updateDimensions()` to make the (proper) width of a given workspace take into account the width of the side title and/or toolbar if either are enabled instead of just doing it when not in embedded mode.
gateone.js:  Added `GateOne.sideinfo` as a quick reference to the side info/title element.
gateone_visual_extra.js:  You can now specify the initial 'top' and 'left' coordinates of a `GateOne.Visual.widget()` via the options (3rd argument).
Bookmarks plugin:  It will no longer automatically synchronize bookmarks after init() if in embedded mode.
New file:  Added english_wordlist.txt to the gateone/static directory.  It is a small list of English words used by the new random_word() function in core/utils.py.
terminal.js:  Fixed the syntax error in `GateOne.Terminal.sharedTerminalsDialog()` that was causing slimit to break when minifying this script.
terminal.js:  Fixed the bug where passing '?terminal_cmd=whatever' in the URL query string wasn't working to automatically open a new terminal when the page loads.  This should close issue #363 (https://github.com/liftoff/GateOne/issues/363).
termio.py:  Added support for a new `MultiplexPOSIXIOLoop` setting:  `use_shell`.  If set to `False` (after a Multiplex instance is created) it won't bother wrapping the executed command in a shell (which is whatever is configured via `MultiplexPOSIXIOLoop.shell_command`, specifically).  This is a slightly different implementation of the same feature in pull request #372 (https://github.com/liftoff/GateOne/pull/372).  Thanks to Toni Moreno and the ITSAT team for suggesting it.
gateone.js:  Added the suggested fix for a looping bug related to dialogs in embedded mode in issue #368 (https://github.com/liftoff/GateOne/issues/368).
INSTALL.txt:  Added a note about how to prevent Gate One from starting on boot on Ubuntu systems.  This should close issue #362 (https://github.com/liftoff/GateOne/issues/362).