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`

I'm not sure about the pattern of using a constructor for this plugin. Having both the Viewer and Editor share state `input` and `field` when they're completely separate feels like a smell.

My original suggestion was to just split them into two separate objects a `createEditorField` and a `createViewerField` and just share the helper functions in the module scope. Then Nick pointed out that they both need access to the `options` object so we can either pass the same object into both functions or have a wrapper that returns the two methods.

```js
var tags = require('tags');
var options = {...};
var v = new Annotator.UI.Viewer({
    extensions: [tags.createViewerField(options)]
});
var e = new Annotator.UI.Editor({
    extensions: [tags.createEditorField(options)]
});

// or
var options = {...};
var tags = require('tags').TagPlugin(options);
var v = new Annotator.UI.Viewer({
    extensions: [tags.viewerField]
});
var e = new Annotator.UI.Editor({
    extensions: [tags.editorField]
});
```