Webclient: canvas renderer customizers (#505).

Concept: a Topicmap Renderer Customizer allows a plugin to change the look & feel of the topicmap rendering. A Topicmap Renderer Customizer is bound to a specific Topicmap Renderer, that is you can't e.g. apply a CanvasRenderer customizer to the Geomaps Renderer (which would make no sense).

Implementation: the default topicmap renderer (CanvasRenderer) provides a new method that allows 3rd-party plugins to register customizer objects:
{{{
    add_customizer(customizer)
}}}

A customizer object for the CanvasRenderer is a constructor function which (for the moment) can have 2 methods:

    - `draw_topic(topic, ctx)` -- receives a topic view object and a drawing context and is responsible for drawing the topic. If the customizer feels not responsible for drawing this particular topic it can return `true` to let drawing to other customizers resp. the default renderer.

    - `create_topic(topic_viewmodel, ctx)` -- receives a topic viewmodel and a drawing context and is responsible for creating the corresponding topic view object. Remember: a view object enriches a viewmodel by information needed for both, drawing and click detection. Most notably that is geometry information. The drawing context can be used e.g. for measuring text.

Each customizer method is optional. If not specified the respective default implementation rules.

You can inspect the default implementation in the new class CanvasDefaultConfiguration.

To see an example topicmap renderer customizer:
https://github.com/jri/dm4-box-renderer

Try this (in the development environment):
    1. install the dm4-box-renderer plugin. That is add it to the hotdeploy list in the global POM and restart DM. You'll see the customized rendering style now.
    2. in the Gogo shell: stop the dm4-box-renderer plugin. You do so by the `stop` command.
    3. press reload in browser. You'll see the original render style.
    4. start the dm4-box-renderer plugin. You'll see the customized render style again.

This illustrates that a 3rd party plugin can customize the default rendering without impairing the default renderer code and without any code doubling.

See #505.