river.py: account for zero-based indexing

Otherwise there'll be OUTPUT_LIMIT - 1 entries, rather than
OUTPUT_LIMIT.
river.py: use feed.website instead of feed.link
river.py: allow the callback in the river to be changed
sort_entries: return an iterator of unpickled entries
take a hammer to everything :)

This is a pretty substantial refactoring/rewrite that ditches the
previous system (which was way too brittle and complex) with something
much better, IMO.

Apologies for lumping everything into a single commit like this. But
sometimes you have to move fast and break things.

- Add constants.py to store our "config" values in a single location.

- Do much more processing in the ParseFeed thread. Part of the reason
  I found river.js difficult to create was because I had separated
  downloading/parsing the feeds from creating the file. Things become
  much easier when you start pushing the resulting structures onto the
  stack during the processing stage.

- Extend timeout to 10 seconds.

- The resulting file now follows the river.js <http://riverjs.org/> spec.