Re-highlight annotations whenever an edit occurs

To make it less expensive, a method has been added to `AnnotationViewManager` to refresh not all annotations but only the highlights.
* This is used as a scheduled redraw task inside `SessionView`
to not make it a CPU hog.
* The destroy mechanism for `SessionView` has been restructured to accomodate multiple asynchronous destructors.

Should close #661.
The slow rerender occurs when you fiddle the parents of the nodes... doing node parent checks is quite fast. You can still leave this quite simple and do something like:
```
var textNodes = getTextNodesInAnnotation();
textNodes.forEach(function(node) {
   if (!nodeWithinAnnotationHighlight(node)) {
       // TODO create a new highlight container and put the text span inside it
   }
});
```

The key performance advantages this has over your current code:

* The text nodes within an annotation are only fetched once
* Most of the time, the text nodes are direct children of the annotation container, so the ``nodeWithinAnnotationHighlight`` check should be fast
* Usually, you won't need to fix any text nodes, so generally this is a read-only function that doesn't modify the DOM

Is there an obvious hole there I missed? :S