WebSockets: Add refresh event handling to core.
JS Preload: Don't preload fetches with data.

For GETs (which is all we do preload for), the data object is turned
into query params in jQuery.ajax (i.e. after we've looked at url) which
means we overzealously match preloads for resources with the same URL
ignoring query params.
Unescape data in Backbone.sync.

Data put in JSPreload was escaped in
reddit/reddit@013a29e221a4712c24f4982d8c32bba8da2e42cd to fix a
potential </script> escape vulnerability.  However, this introduced an
inconsistency where data fetched directly over HTTP from the API would
be escaped while pre-loaded data would be unescaped.  This removes that
inconsistency without propagating _.unescape calls throughout the code
by moving the unescaping into Backbone.sync.
TemplateFileSource: Unescape inlined templates when uncompressedJS.

Since DataSource started being websafe_json'd when inlined in the page
in reddit/reddit@013a29e221a4712c24f4982d8c32bba8da2e42cd,
TemplateFileSource templates have been broken when uncompressedJS is on.

This makes r.templates unescape the templates when in uncompressedJS
mode.
Websockets: Remove escaping of data.

This is not necessary and is inconsistent with the changes in JSPreload.
timetext: Undo logic flip that broke times >1 day.

During the move to core, timetext's chunk logic was flipped around as an
optimization. This didn't actually work, though that's been unnoticeable
in production because the maxage perfectly masked it.

For a timestamp 32 hours ago, "1 day ago" would be the expected output,
however "32 hours ago" would be displayed instead. This is because the
chunk values are in seconds while they're compared against "count" which
is the current unit-of-interest (hours, days, months, etc.)

This reverts that logic to the original form which was how the python
code works.
timetext: Allow maxage to be set to zero to disable it.
timetext: Factor out time formatting for overriding in children.
JS: Add way to append language-specific data to LocalizedModules.

This allows the plural forms expression and translated string data to be
subsumed into this system rather than continuing to be special cases.