Turn Stream into App

This refactor turns the stream page a part of our main H application

Main features:
* Stream is now accessible from our app at the /stream angular route
* Stream has the same header (same look, same code) as the main app
* Authentication from the stream page is now possible
* The same visualsearch-bar is used both for page- and stream search
* Stream page now uses our viewer.html to show annotation cards.
* Replying to/editing/deleting annotations can be done in the stream
page too.

Details
* streamsearch.pt is obsolete and has been delete because app.pt is
used instead of it.
* streamviewer.html is obsolete and has been deleted because
viewer.html is used instead of it.
* The QueryParser class is moved into the streamfilter.coffee and
available is a new service for the app.
* The visualsearch directive now uses functions living in the
<current scope>.search object that any part of the app can configure it.
Use $route.reload() instead of refresh events

Rather than using extra events to trigger a round trip through the
visual search directive callbacks and query parsing, simply rely on
$location.search() at the time the route controller is instantiated
and stop using `reloadOnSearch: false` in the route definitions so
that changes to the search trigger a refresh of the view.

The QueryParser now splits `populateFilter` into `parseModels` and
`populateFilter` so that the models can be parsed when the visual
search callback fires and the filter can be populated separately
from the query string after the route reload.

Summary of improvements:

- Drop the VSSearch and RefreshSearch events.
- Make the search.query scope property a simple value instead of a
  function. This reduces the work required for the watcher and is
  possible because we no longer update the query string unless the
  query changes and the route will reload if it does.
- Clearing the stream is no longer necessary, since it starts clear
  on each route reload.
Don't reconnect when deliberately closing updater

Failure to do this results in an infinite loop of reconnections.
Avoid updater double initialization

Don't initialize the updater twice when logged in.

When the session is first loaded, only initialize the updater if there
are no logged in users in the session. If there are, the updater will
be initialized by the watcher.

Fix #1307
Fix infinite scroll for new updater
Exponential backoff for websocket failures

Close #1291
Use content-box inside all of visual-search
Remove unreachable code
Simplify duplicate facet handling

When a query parameter is used twice in search or the same facet is
selected twice in the search input handle it the same way.

- Remove special code for multi-value filter clauses
- Remove special parsing of text facet, which seems to have been
  added by mistake (the space-delimited text field might come from
  the text field being the default remainder field, meaning it takes
  the left-over text in the search box which doesn't match a facet)
Show the search box if initial query is non-empty
Clean up filter, updater, and store interactions

Rather than having the annotator service handle the API service
discovery event, handle it in the app controller. That allows for
all the calls to add the Store plugin to be centralized in this
controller.

The `reloadAnnotations` function is modified so as not to assume
that a Store is already loaded, cleaning up only if one is. The
new store is placed on the scope so that its entities can be watched.

Rather than racing with the store, the updater is configured with
a new filter when the entities change. When the stream route is loaded,
these entities are empty, but the configured stream filter is sent
without re-initializing the filter. The stream search controller only
has to send a new filter if an updater is already open, otherwise it
is opened when the store is configured.

The patched `Store.loadAnnotations` is changed so that it creates a
fresh entities object on each invocation. This change ensures that if
provider frame disconnection is handled at some point the entities will
not continue to be included in searches and it makes the scope watcher
for this property very cheap.

Fixes #1306
Unify stream and viewer styles

- Vertically align the thread expander using ems and taking into
  account the size of the header it's aligned with.
- Fix excerpt bottom margin to match viewer
- Tuck the thread border under the content of the parent with a little
  extra padding
- Align the padding of the content class with card margins
- Rather than using a space character in the font icon styles, use the
  offset margin by choosing a sensible, non-zero default

Close #1290
Isolate topbar related styles into topbar.scss
Merge pull request #1281 from hypothesis/stream-search-refactor

Turn Stream into App