Remove some dependencies on Zotero

 * The Dontprint JavaScript object is no longer a member of the Zotero
   object.

 * Zotero.Prefs no longer used. Instead, use nsIPrefService directly

 * No longer use Zotero.DBConnection. Instead, directly use Sqlite.jsm.
No longer use Google Drive.

Instead of using the detour to upload files first to Google Drive
and then from there sending them by email, Dontprint now just uploads
the file directly to the sendmail script. It uses a POST request
to send the data. Before sending the POST request, the Dontprint client
makes a dummy GET call to the same Google Apps Script application to
make sure that the subsequent POST request isn't interrupted by an
authorization page. The POST request is done with an XHR. An
alternative would have been to do send the POST request from the
already opened tab but that would freeze the tab (thus not allowing us
to show a progress bar) and change the tab title to "Connecting", which
is wrong.
Simplify control flow for Dontprint jobs

Previous to this commit, Dontprint jobs consisted of a series of
asynchroneous function calls, where each function initiated some
asynchroneous operation whose callback would be set to a function
that would initiate the next asynchroneous operation. This approach
created a very complex control flow and it was not obvious at first
sight, in which order operations were executed. This made error
handling difficult. Also tracking progress of a currently running job
would have been challenging within this framework because jobs didn't
have a direct representation in the data model, and it would have
been difficult to abort a running job.

This commit greately simplifies the complete control flow of a
Dontprint job:

 * Each job is now directly represented by an object, usually
   referenced to by a variable called "job", which holds all data
   associated with that job.

 * A single small function "runJob()" supervises the complete life
   cycle of a job and catches any errors.

 * The function runJob() spawns a Task.jsm task in which it iterates
   thru a number of asynchroneous operations. Each operation is
   implemented in a generator function so that runJob() can initiate
   the operation and wait for its completion with a single yield
   statement. If any of the sub-operations encounters an error,
   it can just throw an exception and it will be handled by runJob().
Unify favicon for all chrome:// Dontprint pages.
Show progress information for running jobs.

Keep track of changes in the state of all running jobs. This includes
both the qualitative type of sub-operation that is currently being
performed as well as the quantitative progress within the most time-
consuming operations (downloading, converting, and uploading).

Progress information is displayed at two places

 * When uploading a file, the corresponding tab now displays the upload
   progress.

 * The user can open a separate tab that displays detailed progress
   information for all running jobs in a "printer queue" kind of style.
   This tab allows to abort a running job. Aborting a job will
   immediately kill k2pdfopt or abort any downloads or uploads,
   terminate any further processing of the job, and delete all
   temporary files. Aborting a running job in Dontprint *actually works*
   reliably, in contrast to any traditional printer I've ever used.
Publish new version of testing branch.

 * Use new sqlite database file because schema has changed.

 * Update "/server" directory to reflect changes in Google Drive.

 * Update installation instructions in README.md.