rewrite validation code

this rewrites the validation code for the 3rd time.
keeps a table of the lastest record for each feed in memory.
all writes are processed as a single queue. downside: when adding a new feed the rest must be paused while retriving that stuff from the database. this is probably not really much of a problem in practice.

Currently, there is nothing to dispose this structure out of memory... but that won't be bad until there are nodes with thousands of feeds on them...

These could both be fixed later, but for now this is simplest, and simplest is most likely to be correct.
There is lots of async stuff going on here, so it's difficult to test.