Overhaul view and sort behavior

Bring the view and sort controls closer in line with the latest
design decisions.

- Start in Document view and Location sort.
- When in Document view and Location sort, use dynamic bucket.
- When in any sort other than location, disable dynamic bucket.
- When in Location sort, all comments always appear at the bottom.
- Remove the Screen and Comment views.
- Remove the focus annotation state that was triggered by expanding
  a top level annotation; there is only hover emphasis now.
- The `showViewer` call always goes to Selection view.
- Using multi-select (Cmd or Ctrl Click on tabs and highlights) will
  trigger the Selection view, or switch back to the Document view
  if the selection is empty.
- Page search always searches the whole document.
- Leaving the page search switches back to the Document view.

Additionally, many cleanups were made as a result.

- No need to track focused state or comments in the client frames.
- No need to pass the view name in `updateViewer` or `showViewer`.
- No need to pass the focus purpose in `updateViewer`, `showViewer`,
  or `toggleViewerSelection`.
- Drop various helper functions around focus.
- No need to manually unshift or push newly created or streamed
  annotations into the view.
- The viewer template uses threads at the top repeater, like the
  page search template.
- The app controller maintains all the annotations on the root scope,
  the current selection shadowing it on the application scope, and
  a cheap, identity watch that retreives the threads.
- The page search can use a cheap watch on the threads to refresh.
- The reply list of each annotation is no longer set on the annotation
  object.
- The thread directive now watches the thread children and keeps them
  sorted, rather than the annotation directive.
- The recursive `buildReplyList` function is no longer needed.
- Scattered use of the root scope is much reduced.
- Drop requestAnimationFrame polyfill because angular has its own.
- Drop the recursive directive, splitting out thread.html and using
  using ng-include for recursion.
- Use a single render queue for all threads and sequence updates on
  animation frames, resulting in smooth, progressive rendering.
- Combine the viewer and page_search templates.
Overhaul the threading, sort, and view further

Lots of changes to massively simplify things and make them much more
performant.

- The thread directive gets a few changes
  - Cleared up confusing tuple unpacking in favor of named properties
    in the render queue as per the suggestion of @aron
  - The replies and annotation are set at once. Since the replies in
    turn render lazily, this should be fast enough for all but an
    unwieldy number of threads. If we hit that wall, we'll have to do
    some filtering / pagination.
  - The directive is now triggered only on attributes and parses the
    attribute value to get the thread
- The threads are rendered from a single thread root rather than using
  a global list of annotations that must be watched for its threads to
  be extracted. This results in a huge performance gain because this
  thread container has a stable set of children.
  - When the first `annotationsLoaded` callback arrives, we set a new
    root from the result of asking the threading plugin to thread them
  - Lots of hackery during store reloads goes away because we just nuke
    the thread root and reload
- The application controller does not have to modify a root annotation
  set at all anymore
- Use of the root scope in the controllers goes away entirely
- The ongoing edit is now stored in the scope again so that it can be
  be pinned to the top of the thread list
- The editor view and controller go away completely because the top
  level edit is now pinned to the top of the list, removing the need
  to re-render annotations between editing and viewing
- The selected annotations are now a hash of annotation ids to true
  values if the annotation is selected, or null if the selection is
  empty
- An ng-show is used to show/hide the selected/unselected annotations,
  further reducing re-renders
- The view state is gone complete and now there is only sort
- The sort is not applied programmatically in the controller, but a
  simple watch on the name of the sort is used to set the predicate
  and reverse settings as scope properties that feed into an orderBy
  filter on the thread list, reducing the number of extra watches we
  have to do and further reducing the code
- The sort is no longer an animated dropdown, but sits at the top of
  the list always (I assume we can style this better, so have at it)
- Unnecessary helper and logging functions are removed from the
  annotator service because silence is golden
Delete unused editor template
Fix display of page search results

Each controller for the viewer template must now define a
shouldShowAnnotation method that accepts an annotation id and determines
whether it should be displayed. This moves the logic out of the template
and into the controllers.
Remove raf.js from the karma config
Isolate the search directive
Invoke clear callback when search model is cleared
More view, sort, and threading refactoring

Clean up a number of issues.

- Fix page search, especially for deep results.

- Split thread directive into its own file.

- Clean up the separation between CSS of threads and annotations.

- Separate more actions menu for annotations from thread actions strip.
  Edit and delete in the former. Share and reply in the latter. Cleans
  up controllers quite a bit.

- Refactor both thread and annotation directives.

- Break out progressive rendering service.

- Clean up template variables to use the controllerAs syntax to treat
  controller as the view model.

- Clean up thread collapse prevention during editing.

- Refactor threading to remove the thread property from annotations and
  take ownership of the thread root, removing the need to track many
  things about threading in the App controller.

- Clean up annotation edit cycle and drop the ngModel usage (doesn't
  work well with objects since it does a shallow watch).

- New thread and annotation directives come with full documentation in
  ngdoc style as supported by the dgeni documentation tool.

- Preserve annotations, when appropriate, upon changing authentication.
  Fix #567.
Add results count to stream search
Change search response to use the 'results'

The word 'result' is, I believe, commonly associated with searching.
Drop annotator.discardDrafts helper

The annotator service is not a dumping ground for helper functions.
Combine Viewer and PageSearch controllers

No longer change routes when the query changes between the Viewer
and the PageSearch controller so that the filtering is near instant.
Refactor page search

Refactor the page search rendering algorithm for fewer scope
variables, simpler template expressions, camel case, support
for holes in threads, less looping, conciseness and readability.
Fix browser history navigation on stream
Even simpler page search

Improve the already much improved page search.

- Rather than binding the render function to a thread, pass the
  render order list in the accumulator.
- Instead of moreTop and moreBottom just use a single property, more.
- More concise everything. What more can I say?
Prune empties in threading plugin

I had decided not to do this initially in order to show annotations
that were missing. We'll have to decide how we want to show the holes,
but it's much better if we prune the containers that aren't used so
that we don't end up with empty threads sitting around all over the
place.

The only tricky thing is that when new annotations are loaded we must
thread everything again or existing containers that were lifted up to
the root will not attach themselves to newly loaded parents.
Clear the search when changing the selection
Add the query to no results message in page search

Fix #1387
Remove ephemeral properties from bridge whitelist

With this change, the show differences code is completely out for
the moment, but there should be no more unexpected properties on
annotations objects at all.

Fix #1207
Move showEditor out of the Bridge