vote: Remove VotesByDay view.

We are not currently using this so it is wasteful to keep it around.
tdb_cassandra: Add DenormalizedRelation infrastructure.

This is intended to replace Relation. Relation works by putting each individual
relationship in its own Row. This means that doing a fast_query (cross-product)
results in a large multiget that likely touches every node on the C* ring.
DenormalizedRelation instead puts all of the relationships into a single row
per thing1 and only fetches the desired columns on read. This means that most
of the time, we'll do a single-row lookup to determine what we want and the
majority of the time we will get a very fast response from the row-level bloom
filters indicating that no such relationship exists.

The row cache should be disabled for this column family as the rows will be
VERY wide.
vote: Start dual-writing to new DenormalizedRelation-based CFs.

See the DenormalizedRelation commit for more details on why.
tdb_sql: Remove unused type_id parameter from set_data.
tdb_sql: Collect stats on wasted UPDATEs in data prop storage.

This will give us better data on which tables will prefer to
SELECT and INSERT and which will prefer to optimistically UPDATE.
Entitize the less-than symbol for the users-online display.
Set g.zookeeper to None if unavailable.
Whitespace.
Localize "an error occurred" in r.ui.Form.
Replace spotlight box help with a hover bubble.
Only use responder output upon None in json_validate.
Refactor spotlight item param names to be more generic.
Move "lookup" spotlight box var out of template.
Make cloudsearch facet params more configurable.
Add subreddit interest discovery bar.
Add subreddit interest bar to /reddits.
Spruce up search pages.
Fixes bugs in promotion code:

Updates an occurrence of "index" that should have been changed to campaign._id
during the campaign thing reads change. This fixes two bugs:

(1) Campaigns were being incorrectly marked with "update failed" when edited
by an admin or sponsor even though the update was successful.

(2) Campaigns were not being automatically marked as freebies when edited by
an admin or sponsor. (These have to be set as freebies in self-serve because
they are billed separately.)

This change also checks for an empty user string so the update function can
be run in paster shell.
Cached queries for user reported things.
tdb_sql/Thing: Assume data props should be INSERTed on thing creation.

Previously, setting data props on a thing would result in a SELECT to
determine which data properties already existed, and then a sequence of
INSERTs and UPDATEs (with some batching) to get the database in the
right state.

The account master wasn't too happy with those extra selects, so we
made it so that the app would optimistically UPDATE and if no rows were
changed do INSERTs instead (with appropriate batching as above).

Unfortunately, this greatly increases the number of operations done when
adding new data props, such as at thing creation time, and on some
tables that's almost entirely all of the workload.

This patch takes advantage of the fact that we know no data attributes
will exist at thing creation time and therefore we can blindly INSERT
without doing UPDATEs or SELECTs first to try and reduce the number of
extraneous operations we do.