Refactor note-toggle (part 1)

This PR abstracts and tests wrapping and un-wrapping notes.  Ive also switched the add-class & remove-class functionality to use string operations.

### QA
- Be sure to test the expand/collapse notes functionality fully.
- Ensure create/remove notes work even on multi paragraph notes.
`/ gu /g` would not work if the className is `"gu foo"` for instance. In theory you could use word boundaries (`\b`) but in practice splitting to a list and manipulating that list is a lot cleaner imho. In general, the functional approach is to embrace simple data transformation into a format that is easier to deal with (here an array).

I don't know if multiple identical classes are expected here. If you want to be safe, you could use `filter` instead:

``` javascript
var classes = n.className.split(' ');
var updatedClasses = classes.filter(klass => klass !== classToRemove);
n.className = updatedClasses.join(' ');
```

(If using ES6, putting the class list into a `Set` would enforce uniqueness and offer a simple `delete` method.)