Bunch of fixes for ejecting devices.

Don't crash if we get metadata updates after the device has been
closed.

If we are running metadata updates when the user ejects the device.
Wait 5 seconds to give the worker process time to cancel the
processing.

Moved the eject code that stops playback from the backend to the
frontend.  Added code that removes the audio/video tabs for the device
before we eject it.  (This ensures that we don't keep open an sqlite
database).
bz19851: include RSS description in fulltext search
bz19850: fixed exception name
bz19849: fixed some device info code

Changed ItemInfo.device from always being None to being a boolean
that's True for device items.

Fixed code to show the copy to miro button on listview.
bz19848: fixed syncing device items to miro
Fixed comments_link attribute name.
Added checks on the protocol of redirected URLs
bz19854: match against RSS descriptions for saved searches
bz19374: write device databases for hidden devices

Just because a device is hidden doesn't mean that we shouldn't write
it's database.  One example is changing the always_show setting to
off.  The new code checks to see if there's a write scheduled and if
so, does the write.
Fixed unittest after the device changes
bz19443: fix download rates for paused items
bz19443 part 2: fix download rate totals

I think this broke around the time when we made the
DownloadStateManager handle changing the state for downloaders without
doing a round-trip through the downloader process.
ItemInfo fixes

Now that we changed the attribute name for the SQL result, we should
also change the name for the default.