changed path to gateone/docs/html. Without this bdist fails to build
RPM.
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).
Merge pull request #378 from renecunningham/master

Changed path to gateone/docs/html. Thanks Rene Cunningham!
core/server.py:  Regular expressions may now be used in the "origins" setting (typically in 10server.conf).  This has been implemented via a new `ApplicationWebSocket.valid_origin()` method which is called inside of `ApplicationWebSocket.open()`.  This new method gets the list of valid origins via `self.prefs` instead of `self.settings` which means you can now change origins on-the-fly without having to restart Gate One.
core/server.py:  Tweaked the message that gets sent to clients when their origin is denied.
gateone.js:  Changed the series of events that occur when a client is denied due to an origin restriction.  Now the message should be clearer and easier to read.
gateone.js:  Fixed the bug where opening a dialog could result in an infinite loop.
TERMINAL SHARING IS NOW COMPLETE/WORKING.  There might be a few rough edges but all features have been implemented:  Sharing with read-only or read/write access, broadcasting terminals to anonymous users, URL generation, notifications of shared terminals, keeping track of shared terminals, logging when shared terminals are used, etc etc.  Please try it out and open bugs in the Github issue tracker if you find anything.
terminal.js:  Lots of changes all over the place to finish up terminal sharing support.
terminal.js:  Setting a password on a shared terminal now works.
terminal.js:  Modified `GateOne.Terminal.reconnectTerminalAction()` to accept a "message" object instead of just a "term" number.  The message now contains the "term" as well as a "share_id" if the terminal is shared or owned by another user.  It will assign that share ID to `GateOne.Terminal.terminals[term]['shareID']`.
app_terminal.py:  Loads of changes to terminal sharing.
app_terminal.py:  Modified the calls to 'terminal:term_exists' to use the new message format.
terminal.js:  `GateOne.Terminal.reconnectTerminalAction()` now triggers the "terminal:reconnect_terminal" event, passing it the message it received from the server.  It does this right before the 'share_id' is assigned to the `GateOne.Terminal.terminals[term]` object so that applications embedding Gate One can create their new terminal/modify the object before the 'share_id' is assigned.
terminal.js:  The `GateOne.Terminal.reconnectTerminalAction()` function will no longer create a new terminal automatically if `GateOne.prefs.embedded == true`.
terminal.js:  Fixed a bug where you could get an exception when sharing then immediately un-sharing a terminal (closeFunc on undefined).
gateone.js:  The fallback for when various `console.*()` functions are used has been changed from `console.warn()` to `console.log()`.
gateone.js:  You can now pass multiple arguments to the shortcut functions `GateOne.Logging.logInfo()`, `GateOne.Logging.logDebug()`, `GateOne.Logging.logError()`, `GateOne.Logging.logWarning()`, and `GateOne.Logging.logFatal()` and they will behave just like their `window.console.log()` equivalents (so the objects you pass as additional arguments will be displayed/browsed directly in the console instead of being converted to strings).
app_terminal.py:  Fixed a bug in `TerminalApplication.notify_permissions()` where it wasn't doing its job in certain situations (i.e. when a broadcast termimnal viewer disconnects).
app_terminal.py:  Moved the call to `self.notify_permissions()` into a `finally:` block.
terminal_input.js:  Added a check for the existence of 'document.activeElement.classList' before calling the 'contains()' function in order to work around a bug in IE where 'document.activeElement' isn't represented properly (as document.body) when nothing is active.
bookmarks.js:  Worked around a strange bug in IE where it didn't like how bookmarks were looped over--preventing bookmarks from being edited.  Can't say I blame IE on this one...  Not sure what I was thinking with the way I wrote that bit of code (LOL).  It is much simpler now.