Rename item table column names to use underscore_names

I believe they only used camelCase before because miro used to be written in
that, and we never took the name to change the database schema.
Refactored the logic for newly-available items.

Before we would set last_viewed on our feed, then use that to calculate if the
item was new (plus several other not entirely consistent criteria).  Changed
it so that we simply have a new column in the items table.

This is going to help the frontend data avoid needing to join to the feeds
table just to tell if an item is newly-available.
Unroll remote_downloader.status column

Instead of storing a dictionary using repr, we store each value in its own
column.  This is cleaner in general and will help the frontend data project
since we need to be able to sort on some of these columns.

While we're messing with thing, I tried to refactor some of the logic for
these values.  Mostly I wanted to try to use None consistently to mean an
unknown or invalid value.  Also changed the type of some of the values.

  - eta/rate use None if we can't calculate them
  - endTime is None before the download has finishing, instead of being equal
    to startTime
  - totalSize is None if we don't know it instead of -1
  - retryCount uses None if we aren't retrying downloads instead of -1
  - Made filename/shortFilename initialize to None instead of ""
  - currentSize starts at 0 instead of None
  - downloaders don't send back the channelName value.  They never change it
    so that was just redundent.
  - Made startTime, endTime, eta, and rate integers instead of floats

Changed the hack for torrent magnet link titles.  Instead of setting
item.title, it sets torrent_title.  It also uses the metadata rather than the
filename attribute.  I think this is more correct than before.
Renamed downloader column to match PEP 8.

This doesn't change the semantics of anything, just the names.

Changing an existing database upgrade is a bit dirty, but I figure it's okay
since this hasn't been merged to master yet.
Fixing fallout.

Fixed a bunch of small issues based on janet doing a pass through the code.
Another quick fix after the schema changes
More bugfixes
Moving setup_restored to be closer to setup_new()
Initialize variables to None

We used to use special int values for these, but None is the new value for
unknown.
Don't store temporary values in the DB.

There's no reason to store these in the DB since we just reset them when we
start up again.
Re-implementing the _save_later() hack in downloader.py
Use lowercase for column types.

We haven't been consistent with this always, but I think it makes sense to
use lowercase.  That's what we use when we create new tables.
fix ALTER TABLE syntax to match what we use in other places
Rearanged RemoteDownloader.update_status a bit.
Drop the seen column on item.

It's just redundent when we have watched_time.

Dropped references to "seen" and changed them to "watched".  It's what we use
in the frontend and it's more clear that "watched" means the file has been
played, rather then the user has just seen the item in an item list.

Fixed typo that accidentally worked in upgrade182.
Rename "pending_manual_dl" to "pending_manual_download"

Paul's right.  As long as we're renaming, we may as well pick a good name.
Another z3p suggestion, don't use the awkward name dler_type.

Replaced it with simply "type".

Also fixed upgrade 182.  We weren't correctly handling the fact the attribute
names and the keys in the old status dict were different.
Refactored the filter code.

Instead of using a mixin class, just have the code in ItemListController.  I
think this is more natural than before and should help me change things for
the new frontend data system.
Merge pull request #366 from pculture/moreschemachanges

Moreschemachanges
Merge pull request #369 from bendk/filterrefactor

Refactored the filter code.