Re-added testing features
Various changes to Auto

Show currently stored settings for each 'remote' (as suggested by Animazing)

Standardised responses to auto websocket requests to always return JSON
with structure:
  {
    "name" : name of remote,
    "request" : original request,
    "response" : response (usually "OK" or "ERROR"),
    "error" : error message or null
  }

Modified auto page to refresh drop down when start button pressed after
a two second time out
If an error is returned from the start function (generally means a bot
has already been started: refresh again)
Fixed zombie problem with multiple IRC bots

Pertains to issue #16

Maintain a dictionary of running bot processes in 'modules/remotes.py' and check each to see if
they're still running when SIGCHLD signal is intercepted
If a process isn't running, join it

modules/autohandler.py:
    save the process object after starting a new IRC daemon process

modules/irc.py:
    when SIGCHLD received:
     run through all saved process objects and check if each is active
     join any processes that aren't active

modules/remotes.py:
    new functions:
        saveProc
        getProc
        getAllProcs
Restart bot if RPC authentication fails

Refers to comment in issue #16
Try to make sure that bots are really dead before stopping
IRC bot fixes

Pertains to issue #16

Deregister bots when they have died and stop_bot is called
Escape non-ascii utf-8 in message reports
Added back the "torrent add" link

(for an easy upload alternative to drag-n-drop)
Debugging
Replaced javascript table 'shading' with CSS

Removed stripeTable() function and replaced it with nth-child CSS
Implemented first step towards RSS support

Refers to issue #14

Created a page for configuring / managing RSS feeds
Wrote storage and retrieval of user-defined RSS feeds (front and
backends)

htdocs/autoHTML.tmpl:
    copied file to autoIRCHTML.tmpl to allow seperate pages for IRC and
    RSS settings

htdocs/autoRSSHTML.tmpl:
    modified version of autoHTML.tmpl for configuring / managing RSS
    feeds

modules/autohandler.py:
    added two new functions: add_rss, and get_rss
    `add_rss`:
        adds a new RSS feed to remotes.RemoteStorage
    `get_rss`:
        returns HTML-formatted table rows of configured and saved RSS feeds
    modified `get_source_single` and `get_sources` to check supported
    methods before HTML-formatting

modules/remotes.py:
    `searchSites` function return value now also includes methods set
    for each handler
    new class `RSS` for storing RSS feed information
    new function `addRSSFeed`
    new function `getRSSFeeds`

modules/server.py:
    changed `autoHandler` to determine whether IRC or RSS pages are
    desired via the 'which' URL parameter (which=IRC or which=RSS)

modules/sites/example.py,
modules/sites/ptp.py,
modules/sites/what.py:
    added boiler plate copyright information

static/javascript/auto.js:
    moved all IRC-specific functions into auto-irc.js
    modifed `navigate_tab` function to switch between IRC or RSS pages
    as appropriate
Refers to issue #14

modules/autohandler.py
    New functions:
    `remove_rss`        - removes an RSS feed
    `enable_rss`        - sets an RSS feed enabled flag to True
    `disable_rss`       - sets an RSS feed enabled flag to False
    `add_rss_filter`    - adds a filter for an RSS feed
    `remove_rss_filter` - removes a filter for an RSS feed
    `get_rss_single`    - returns HTML for a single RSS feed
    `get_rss_filters`   - returns all filters for an RSS feed (currently
                          not used)
    Modifed formatting to return current RSS feed filters

modules/remotes.py
    New functions in RemoteStorage class:
    `removeRSSFeed`     - remove_rss in autohandler
    `enableRSSFeed`     - enable_rss in autohandler
    `disableRSSFeed`    - disable_rss in autohandler
    `addRSSFilter`      - add_rss_filter in autohandler
    `removeRSSFilter`   - remove_rss_filter in autohandler
    `getRSSFeed`        - get_rss_single in autohandler
    `getRSSFilters`     - get_rss_filters in autohandler

static/javascript/auto-irc.js
    URI-encode new filters

static/javascript/auto-rss.js
    Added relevant code to allow enabling and disabling of RSS feeds,
    and adding and removing of RSS filters
First full implementation of RSS feeds

Refers to issue #14

modules/ajaxPage.py
    Added new function `load_from_rss`
    Adds a torrent from a file downloaded via an RSS feed

modules/autohandler.py
    Added a class indicating whether a feed is enabled to feed table
    rows

modules/feedparser.py
    3rd party module for parsing RSS feeds (http://code.google.com/p/feedparser/)

modules/irc.py
    Added copyright boilerplate
    Moved RPC functions / classes to seperate module 'modules/rpc.py'
    Made filter regexes case insensitive

modules/remotes.py
    Added two new attributes to class `RSS`
     .updated    : UNIX timestamp for the last time the feed was requested
     .lasthash   : the SHA-256 hash of the URL for the most recent item
                   in the RSS feed
    Added a check that the RSS feed is valid when adding feeds
    Return new dictionary items when requesting feed details
     "ttl_str"  : the string representation of a TTL (previously "ttl")
     "ttl"      : TTL in minutes
     "ttl_sec"  : TTL in seconds
     "lasthash" : (as above)
     "updated"  : (as above)

    New functions `updateRSSFeed` and `updateHashRSSFeed`

modules/rpc.py
    Module holding RPC classes and function for use by IRC bots, and the
    RSS process

modules/rpchandler.py
    New functions
     `get_rss_filters`
     `get_active_rss`       - filters RSS feeds by the enabled attribute
     `update_rss`
     `disable_rss`          - for when RSS feeds are invalid
     `updatehash_rss`
     `fetch_torrent_rss`    - for fetching torrent files

modules/rss.py
    Deals with RSS loop

modules/server.py
    Now starts RSS process daemon on start up
Fixed filter addition / removal bug

Refers to issue #14

Summary:
    Fixed bug where filters were added/removed to/from all RSS feeds
    simultaneously, by converting RSS feeds from an object to a basic
    dictionary
    Potentially fixed various unicode encoding bugs

modules/ajaxPage.py
    Removed filename encoding from `load_from_rss` (shifted this to
    modules/weblog.py)

modules/autohandler.py
    Various debugging changes (will be removed in next commit)

modules/remotes.py
    Renamed class `RSS` to `RSSFeed`
    Made class `RSSFeed` defunct, RSS feed information is now stored as
    a basic dictionary

modules/rpchandler.py
    Changed RSS download request to use AJAX function `load_from_rss`
    rather than `load_from_remote`

modules/rss.py
    Removed encoding of RSS element titles (shifted this to
    modules/weblog.py)

modules/weblog.py
    Added error handling for internal _process function
    TypeError: signifies that not enough arguments are passed for string
    formatting
    UnicodeDecodeError: signifies that there are non-ascii characters,
    responds by encoding with string_escape
Removed various debugging messages
Added visual status to RSS page

Pertains to issue #14
Start torrents automatically when loaded from RSS

Potentially closes issue #14
Catch all errors in RSS module

Pertains to issue #14
Don't attempt to restart bot if _name is RSS (i.e. RSS process)
Exit more gracefully if messages don't conform to expectations
Make TOTP token more lenient (120s rather than 10s)