Optimize reply count updates

Rather than traversing all the descendants at every digest of every
level of every thread, propagate updates from leaf nodes to parents
by giving each thread access to its parent thread controller. Digests
are only ever performed at the top level and are debounced so that
during progressive rendering of threads the number of digests is
greatly reduced. Some adhoc experimentation yields a 50% reduction in
digests during thread rendering on top of the performance gain by
not traversing descendants in `messageContainer#flattenChildren` calls
on every digest.

To accomplish the debouncing, the render service now returns a cancel
function making it have the same signature as `requestAnimationFrame`.
Introduce the threadFilter directive

Create a new directive, threadFilter, that leverages the deep message
count feature of the new thread directive, using the searchfilter
and viewFilter services to keep track of the threads that match the
search filters in real time.

Close #960
Close #1109
Add a directive for tracking nested aggregates

Rather than continuing to track the message counts in the thread
controller, make a separate deep-count directive that exports a
getter / setter from its controller that can be used to query and
increment counters that bubble aggreggations up to any deep-count
directive above.

Instead of firing a `threadCollapse` event when threads collapse
and canceling it from the annotation directive when the annotation
is being edited, the deep-count directive is used to track the
total number of messages in a thead, the number of matches found
by the thread-filter directive, and the number of annotations that
are being edited.

Remove most of the injectables from the thread controller and handle
more of the DOM-specific bits in the link function. The controller
becomes even simpler, but the directive needs tests now.
Display a message when the top post is unavailable
Move share and reply back inside the annotation

Move the edit and delete actions back down to the bottom of the
annotation alongside the share and reply actions.

Improve the experience when searching and composing by adding a
freeze function to the thread filter so that edits can freeze their
filter in a deactivated state in order to always match the filter.
This change keeps edits visible all the time and keeps the reply
and show more counts accurate.

Make the annotation and thread markup a bit more semantic and use
this to tweak some margins now that the reply count is below the
actions.

Drop the "<nobody>" placeholder for unattributed annotations and
instead just opt not to show the username or privacy and highlight
indicators.

Change the markdown directive to use an attribute and tighten up
the collapsed thread styles.