Fix horrible issue with karma-bro

We still (after close to 2 days digging into this) don't understand
what's going wrong here. Despite apparently having restored all package
versions to ones that previously worked, we've been unable to get this
working again.

While debugging the issue we discovered that adding a bundle call in the
prebundle hook gets the tests passing again. This is a horrible fix and
doesn't relieve us of the need to understand what's going on here and
how to fix it, but I don't want to burn any more time on this problem
for now.
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