Introducing fuzzytime directive to get rid of tons of needless recalculation.

Instead of calling the fuzzyTime filter for the $viewValue.updated in the annotation.html we're now calling this filter in the directive ctrl.$render.
This way it only recalculates the fuzzyTime filter once / annotation / clicking to the bucket.
Remove one superfluous $digest call from .on 'click' bucket.

It calls annotator.showViewer() which calls updateViewer() which already has a $rootScope.$digest() call.
Superfluous  argument in fuzzytime directive
Added mediumDate to fuzzytime directive
Move authorization info to the annotation directive.

This way the auth('delete') and auth('update) is calculated only once per annotation
Added timer for fuzzytime directive
Get rid of replies(annotation) call from the Viewer.

The replies(annotation) call of the viewer.html ng-repeat was called in every $digest cycle yet it only needs to be updated upon annotation creation, reply creation, delete.
Therefore an updateReplies event is introduced which is emitted up in the hieararchy and every annotation updates it's new reply_list property (which as it's namesake suggest keep a list of the annotation's replies)
Bugfix for reply_list calculation, calculate it for non-level-annotations too
Using () inside the time-directive instead of
Get rid of angular orderBy:sortThread:true filter

The main cause of this problem was that angular was calling this filter very frequently.
Now the annotation.reply_list is maintained that it stores the replies sorted and using the filter is no longer necessary.
Use sortAnnotations() from the annotator
fuzzyTime directive listens to  to call cleanInterval()
Merge pull request #730 from hypothesis/688-digest-cleanup-1

Re-design lots of code path, so that digest cycles are triggered in a less insane manner.