Adopt KPIggybank's data format

This means:
    - The fake data server generates data using that format.
    - The data downloaded from the server is expected to be in that
      format too

The difference:
    KPIggybank's wraps the payload of KPI data into an object that has
    an ID and where the data itself is under the "value" field.
    (This is how the data is extracted from CouchDB.)
Move date determination into data module
Move date determination into new util module

Turns out, it's needed in multiple places
Introduce CouchDB as a dependency
Load configurations synchronously

Ensures that, whenever settings are requested, they have already been loaded.
Pre-calculate user flow over time report

Prior process:
    On every request, data was downloaded, the report was prepared, then
    sent back to the user.

Now:
    Separately from the server, data is downloaded and stored in CouchDB.
        (This is done, manually for now, using the script server/bin/update.)
    The server sets up views in CouchDB that map/reduce the data into a form
        ready for the report.
    On user request, the data is retrieved from the appropriate view and
    sent back.

Benefit:
    Data download and report calculation only needs to happen once.

Scope:
    This commit only switches over the "new user flow over time" report.

This is the first major part of implementing #10.
Partially migrate new user report (#2) to database backend

Uses database backend for cumulative requests;
requests for segmented data get processed using legacy code.
Add first segmentation to db-backed new user report

Segmentation by OS
Use database backend for all new user segmentations
Ensure only known segmentation values are stored in database

"Known" means the ones listed in the config file.

Fixes the way we populate the database to be consistent with how data
aggregation used to happen.
Consolidate creation of views for new user report
Unwrap segmentation values

Due to code copy/pasting, segmentation values in the database were
stored inside a size-one array (e.g., ["value"]). Though things weren't
breaking, there is absolutely no reason for that here.
Convert "assertions" report to database backend
Convert sites logged in report to database backend

The report is also converted to display the mean number of sites logged in
instead of the median (closes #29).

The reason behind it (from #29):

Report #1 is the median number of sites a user logs into with Persona.

As part of migrating to CouchDB as the backend (#27), finding the median
of the data series becomes a significantly harder technical challenge.
(To do it in a map/reduce framework requires a quick-select algorithm,
which there doesn't seem to be a good way to do in CouchDB.)

Alternately, the median value for each day could be precalculated when
data arrives and then stored in the database. However, this would
require either a new database (cumbersome) or a change to the data
format and code of the current one (very undesirable).

Calculating the mean of the dataset, however, is much easier.

While the median is a more sensible value to look at (it is less
sensitive to outliers), it has been agreed, before, that this entire
report is not hugely meaningful. The median value itself doesn't really
say anything. The only way we'd use it is to watch the number and hope
it trends up. In that case, however, the mean is just about as good: we
can look at it and watch its trend.
Remove code deprecated by switch to database backend
Fix #30: holes in data break user flow over time

The problem was that, in the data returned by the server, some days
didn't have a value for every step.

That is an indicator that 0 people completed the missing step, but
that needed to be stated explicitly.
Merge database backend implementation

Closes #27: Pre-calculate reports, store them in CouchDB for retrieval