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`

Of course, the answer to some of my question is that the function isn't supposed to be a constructor. But @nickstenning, you gave examples asking which version is clearer and you jumped to putting constructor functions into the extensions option. I don't think this opacity is good because even here, with just the three of us who are very familiar with the domain, it's not 100% clear without fully understanding what's happening how we're supposed to use this.

I don't see how "easy for people who don't know what their doing" should imply "more opaque and magical". That's a great way to generate a lot of mailing list traffic, but I'd rather make it explicit, transparent, obvious and demand that people have a modicum of JavaScript knowledge.