Don't print migration warning for configuration backup files
Don't crash when upgrading from pre-5f0389f (SMTP install.py args)

Before this fix, if you upgraded from a Critic version that did not
support --smtp-* command line arguments in install.py (i.e. before
5f0389f) to a Critic version with such support, the upgrade would
crash because it tried to read, for example, arguments.smtp_use_ssl
in the installation/smtp.py prepare() step.

The fix is to only read arguments shared between install.py and
upgrade.py, unless a mode == "install" check has been made.

The crash can be reproduced by upgrading from 30c4f10 to 25071da.
Install symlink if something is a symlink in git

Before this fix the installer would install two identical copies of symlinked
files, one named as the symlink and one named as the symlink target.

For example in fa5971e it installed jquery.js and jquery-1.7.1.min.js
(two identical regular files).
Sort migrations according to initial commit date before running

When upgrading over really large spans of commits one might be executing
a large set of migration scripts and in this case the execution order of
these are critically important.  This fix makes sure the migration scripts
execute in the order that they were originally added to the Critic git
repo.

An example of a bug caused by wrong migration script execution order can
be seen (along with other issues) in the upgrade from 30c4f10 to 25071da.
The two migration scripts that have an order dependency in this case is:

preference.commit.diff.rulerColumn.py (added 2013-04-08) which adds a
new pref and lists default_integer in its INSERT query, and then
dbschema.per-repository-or-filter-preferences.py (added 2013-07-10)
which deletes the default_integer column in preferences.
Fix out-of-repo symlink hashing

Critic currently uses "git hash-object" when finding the content hash of a
installed file (i.e. /usr/share/critic/whatever.py etc), and on the git repo
side it uses "git ls-tree".  This works well if the target is a normal file,
but it doesn't work if the installed target is a symlink.  This is because
git hash-object will follow the link and hash the content of the file that
the link points to, whereas "git ls-tree" returns the content hash of the
symlink itself.

"git hash-object" currently has no switch that instructs it to hash the link
itself when given a symlink.  Because of this we need to manually compute the
content hash of the symlink, in such a way that it matches the hash returned
by "git ls-tree".

Before this fix, when Critic was running an upgrade where a file pointed to
by a symlink changed (e.g. jquery.js), it would incorrectly say that "the
file has changed since it was installed" and ask the user for confirmation.

Such an issue can be seen in the upgrade from 30c4f10 to 25071da, after
various other issues is worked around.
Specify what is OK when it's OK
Don't commit db transaction setting new installed_sha1 for upgrade dry-run
Drop unused import json in installation/{criticctl.py|initd.py|config.py}
Keep background services and apache turned off during upgrade
Show "Create Review" button after reprocessing branch with new base

When a user pushes a branch with e.g. two commits to Critic, and then
amends to the second commit and pushes the result as a new second
branch; then the /branches page shows the second branch containing
just one commit but it also offers to reprocess Critic's view of that
branch by selecting a new "base" for it.  When this is done, such that
both commits are visible on the second branch, then the usual
"Create Review" button wasn't immediately visible post-reprocessing.
This fix makes sure that the page is reloaded so that a clean normal
view of the reprocessed branch is seen.
List existing "select everything" keyboard shortcut in page footer
Simplify the quick search info box
Update form styles

- Remove styles from selects, since they are impossible to get
  to look nice across platforms without a lot of hacks (they currently
  looked pretty bad on my Mac)
- Use a focus style that works better with the rest of the design
- Remove monospace from some inputs, and selects. Which inputs should
  have monospace fonts will be decided on a case-by-case basis, matching
  how the text would typically display in a desktop application.
  We might also possibly remove monospace fonts from all single line
  text inputs, as it has limited usefulness.
Make unqualified searches always search in description and summary

This makes the different behaviours differ less from each other. What
happens is basically that you always search summary and description, but
if the term is a single word, it will also look in branches, and if it
looks like a path, it will also look at paths.

This change is also necessary for a coming simplification of the search UI.
Redesign the search page

The design is based on some assumptions:
 - Free text search is common and should search all relevant fields.
 - Owners is the most common user search, so that is the default.
 - If you want to search in a branch, you will often select a
   repository. Their relationship is made clear in this design, with a
   "this-then-that" workflow.

Slightly more Python code at the moment as there are no helpers for
non-table paleyellow sections, but in the long run it's a simpler approach.

The CSS uses flexbox, currently with no vendor prefixes. It is tested in
Opera 12 and Chromium-based browsers, but might be broken in Firefox,
Safari and IE10, but those should be quick fixes.
Add 'text' keyword to search both summary and description
Add owner-or-reviewer as an internal search keyword