Don't tear down cache upon deleting and reordering feeds.

Tearing down on deletion is avoided by dynamically filtering out
inactive feeds in Storage.getAllFeeds() when necessary. Reordering
is dealt with by re-sorting the array, though it prevents us from
freezing it.
Don't tear down cache upon inserting new feeds.
Use separate callback functions for timers.

Handling different timers in a single notify() method is a bad
pattern, it's a leftover from the time when nsITimer didn't allow
to pass a function as the callback.
Use wait() instead of one-shot timers.
Clear up module initialization.

Currently the initialization order is as follows:
1) Service.js inits Storage.jsm by importing it on startup.
2) Storage.jsm immediately inits FeedUpdateService.jsm by importing it.

The disadvantage is that FeedUpdateService.jsm initialization cannot use
(or even refer to) Storage, because it's invoked in the middle of Storage.jsm
initialization. In other words, initializations of two modules can depend on
each other only in one direction, they can't create a cycle by being mutually
dependent.

Currently the dependence is backwards. Storage.jsm initialization depends
on FeedUpdateService.jsm (even though it doesn't need it), preventing
FeedUpdateService.jsm initialization from using Storage.jsm (which it _does_
need).

This patch clear it all up, so that Service.js initializes both Storage and
FeedUpdateService by importing them separately on startup. Storage.jsm will
import FeedUpdateService via a lazy getter.
Storage should allow for asynchronous initialization.

Introduce Storage.ready property in form of a promise.
Remove the remaining synchronous database operations.
Clean up FeedProcessor.

Flatten processEntry() by using a task and getResultsAsync().
Remove the over-cautious handling of binding params of insert
statements, now that it has turned out they weren't the cause
of entries and entries_text tables going out of sync.
Validate search string with regexp instead of catching FTS errors.

Full-text search string must contain at least one non-excluded term.
It's much better to validate the string beforehand instead of catching
execution errors. An invalid search string will now be ignored.

While we're at it, convert more Query methods to use tasks.
Put database schema in JSON and move it to a separate file.

Using an object-based map instead of a string literal to define the
schema makes columns enumerable so that we can avoid duplication in
various places.

I also took the opportunity to improve the documentation of the schema.
Remove FeedContainer.jsm.

The container classes didn't do anything besides providing an
enumerable list of available properties and setting their defaults.
Now that the database schema can fulfill this purpose thanks to being
specified with JSON, we can get rid of the container classes and pass
around the data using ad-hoc classless objects.
Convert Storage.jsm to use Sqlite.jsm instead of our custom wrappers.
Use FTS4 for new databases.
Convert feed view to CSS flex box layout.