gateone.py:  Changed how plugins are loaded (moved from the global space to inside main()) in order to support fine-grained control over who can use what.
gateone.py:  Fixed a bug in render_and_send_css() where the only file it was cleaning up was 'rendered_ssh_css'.
gateone.py:  Added a new function:  render_style().  It will render a given CSS template and save the result in the cache.  It is also intelligent about whether or not it has already rendered the very same CSS template and will skip the rendering part if warranted.
gateone.py:  When sending css styles to the client the filename will now be given as a hash.  This is to avoid an unnecessary information disclosure (the filenames contain their full path).
gateone.py:  Added a new function:  render_style().  It works in conjunction with get_style() to minify and cache themes, text colors, and the print stylesheet.
utils.py:  Added an "enabled=None" keyword argument to get_plugins().  This replaces the old logic which would look for a plugins.conf file in the gateone dir.
utils.py:  Modified get_applications() to work just like get_plugins().  It now takes an "enabled=None" keyword argument instead of the 'settings_dir'.  This is more efficient since we only have to load settings once instead of with each call to those functions.
utils.py:  Added a new function: get_or_cache().  It will retrieve the data from a file in the cache_dir or if the file has yet to be cached it will minify the file (if warranted), cache it, and return the result.  It also cleans up older versions of cached files.  This new function has been used to simply the logic in various JavaScript and CSS related functions in gateone.py.
Settings Examples:  Added a new example:  30plugins.conf.example.  It has two new settings to control which plugins are enabled:  "enabled_plugins" and "user_plugins".  The former controls which plugins are loaded at the global level (really only applies to Python plugins) and the latter controls which plugins a user can access (JavaScript and CSS).  I haven't fully implemented this feature yet but at least I've decided how it will work :D.
Settings and Settings Examples:  Changed the format of 50applications.conf...  Instead of `'app name': true` it now uses a list of app names.  Also, there are now two options for controlling applications:  "enabled_applications" for globally enabling/disabling apps and "user_applications" for controlling application access in a user-specific specific way.
CSS (all):  Loads of tweaks and cleanup all over the place.
Bookmarks plugin:  Fixed an obscure bug in the tag renaming dialog where the cancel button wasn't working.
Bookmarks plugin:  Converted a lot of the use of #{{prefix}} to the new .✈classname format.  Still have a lot to go though.
Logging plugin:  Added support for restricting users ability to view logs via the 'view_logs' policy/setting.  Just add '"view_logs": false' to the "terminal" settings dict in gateone/settings (e.g. settings/50terminal.conf) for any user you wish to restrict.  Removing the log viewer GUI based on this setting is forthcoming.
Logging plugin:  Fixed issue #186 (https://github.com/liftoff/GateOne/issues/186) where log playbacks were not rendering due to the COLORS_256 variable no longer being present in gateone.py.
Logging plugin:  You can now use the spacebar to pause/resume playing exported session recordings.
Logging plugin:  You can now use the scroll wheel to fast forward/rewind in exported session recordings.
Logging plugin:  Did a lot of cleanup/code optimization in the GateOne.TermLogging JavaScript (logging.js).
Playback plugin:  Added the same spacebar and scroll wheel enhancements as I did to the Logging plugin.  Still have some bugs to fix in the .py file though.
app_terminal.py:  In send_256_colors(), removed the parts that render the CSS and put them in a new function, render_256_colors().  This is so that plugins can get access to that information without having to re-render it themselves.