Reworks the Tags plugin

Introduce Widget extensions:
- 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`
Introduce installExtensions()
Add tags to defaultui
Remove public parseTags and stringifyTags functions

No need to call them publicly.
Using this.options.parseTags|stringifyTags instead
Install extensions at the end of the constructor
Separate Viewer and Editor extension function in Tags plugin

- Has a common wrapper called createTagsPlugin
- All other functions are private
- Viewer and Editor extension functionality do not share the same scope
- But they receive the same options
Rename Widget.render to Widget.attach

- No explicit call to this function at the end of the derived constructors.
- Installs extensions only the first time
Fix jslint errors
Rename mayInstallExtensions to _maybeInstallExtensions
Exports tags as UI.tags
Merge pull request #464 from openannotation/rework-tags-plugin

Rework Tags plugin