termio.py:  Fixed a Python3-specific bug with get_or_update_metadata() where it could throw a TypeError in certain situations.
termio.py:  Added an extra check to Multiplex._reenable_output() so it won't result in a not-really-a-problem IOError exception from winding up in the logs if self.fd is already being watched by Tornado.
termio.py:  Overhauled the rate limiter logic (yet again).  The result is fantastic though:  It will no longer interfere with supported FileTypes being captured.  It will also operate in a (mostly) smooth mannter...  Merely slowing down other users a bit rather than the former logic which caused stop/go responsiveness.  Furthermore, when the rate limiter is engaged and you press Ctrl-C to kill the noisy process it will intelligently respond to this situation by clearing the file descriptor's buffer and subsequently disengaging the rate limiter.
terminal.py:  A bit of code cleanup.  There were still some leftovers from before the FileType logic.
terminal.py:  Tweaked the PDF regex a bit to make it match a *lot* faster when capturing.
terminal.py:  Users will now be notified of the progress of their FileType captures.  Notifications will only be kicked off if it takes longer than 1.5 seconds to capture a file.  This should ensure that small things like images "just work" without any unnecessary notifications.  The notification delay can be controlled via Terminal.message_interval (it's a timedelta).
terminal.py:  Added a couple convenience functions for calling specific callbacks:  Terminal.send_message(), Terminal.send_update(), and Terminal.send_cursor_update().
terminal.py:  Added a new function that can be used to abort FileType captures:  Terminal.abort_capture().  It sets `self.cancel_capture = True` and sends a message to the user indicating that the capture has been aborted.
terminal.py:  Terminal.write() has had its logic modified to be able to gracefully recover when a FileType capture is aborted (see above).  It will do its best to separate the captured data from the trailing prompt characters; discarding the captured stuff and writing out the leftovers.
terminal.py:  Fixed a bug where under certain (rare) circumstances you could get a ValueError while capturing a FileType resulting in the terminal being terminated.
gateone.py:  Added some logic to detect when a user presses Ctrl-C during a FileType capture operation:  It will call Terminal.abort_capture(), restoring the terminal back to its usable state.  Before this change terminals could get stuck in capture mode forever.
SSH Plugin:  Fixed a bug in terminate_sub_channel() where you could get a RuntimeError if the OPEN_SUBCHANNELS dict changed while it was being iterated.  I could only reproduce this in Python3 but it doesn't *seem* like it would be Python3-specific.
Logging Plugin:  Fixed a bug where viewing playbacks of logs wasn't working due to the recent changes in terminal.Terminal().
Logging Plugin:  retrieve_log_frames() now skips the first frame of a given log if it just contains metadata.
SSH Plugin:  Modified the logic surrounding execute_command() that detects the READY_STRING to be more reliable with systems that use ancient/stranger shells and prompts.  Also updated the title-setting portion of that code to use a less direct echo command instead of trying to send raw characters (also to work around ancient shells).
CSS Themes:  Just a few minor tweaks here and there.
Text Themes:  Same as above:  Just some minor tweaks.