Rework Tags plugin

This PR reworks the Tags plugin and introduces the Widget extensions concept.
- Widget extensions are functions that can be added to a widget as options.extensions (expects a list)
- These functions are run on the widget at rendering.
- This is a hook point to customize widgets, add necessarily new fields, etc.

The Tags plugin:
- Converted from coffee to js.
- It is no longer a plugin but an UI extension, so moved from plugins directory, to ui directory
- The filtering part is gone, since we have a separate plugin for that
- Offers two widget extensions: `configureViewer` and `configureEditor`

Completely agree that the capitalisation of the extension functions in the example has caused confusion here. After discussing this with Nick I was under the understanding that these extensions were just a function that received a viewer or an editor and could set themselves up how they like.

var v = new Annotator.UI.Viewer({
    extensions: [markdownRenderer, tagsField]
});

I like this pattern because it's simple to understand. You want to extend the viewer? Just create a function that receives a viewer and do what you will with it. No constructors, no config just a function.

As for `tags.addToViewer(widget);` vs `viewer.addExtension(tagsField)` (or the `extensions` array). I prefer the latter for a number of reasons, firstly the code reads better, you have a `viewer`, and you're going to add `tagsField` to it. Also this is a pattern familiar to most people working with common JavaScipt libraries, express for example uses this to register middleware with `app.use`.

With the function pattern you can still instantiate them in the `foo.addToWidget(widget)` style but it looks odd to me:

```
var viewer = new Viewer();
tagsField(viewer);
markdownRenderer(viewer);
```

Either way, it's a good thing that we're having this discussion now, it's these kinds of things that we need to iron out with these plugins.