Topicmaps module: viewmodel customizers (#505).

Plugins can extend the Topicmap viewmodel on-the-fly at server-side. They do so by implementing a ViewmodelCustomizer and registering it at the Topicmaps plugin. The Topicmaps OSGi service provides one new method:
{{{
void registerViewmodelCustomizer(ViewmodelCustomizer customizer)
}}}

A ViewmodelCustomizer implementation has one method:
{{{
void modifyViewProperties(Topic topic, CompositeValueModel viewProps)
}}}
Before sending a topicmap to the client the Topicmaps plugin calls this method for every topic contained in the map. The plugin then have the opportunity to add view properties (e.g. color, shape) to the CompositeValueModel. The Topic instance can be used to fetch the view properties from the DB, either through navigation ("get related topic(s)") or through the Property API.
The Topicmaps plugin serializes the CompositeValueModel as "view" property (in the topic's JSON representation).

As an example see the Box Renderer plugin:
https://github.com/jri/dm4-box-renderer

Note: Currently a ViewmodelCustomizer is only applicable to the default Topicmap viewmodel, not to the Geomap viewmodel.

BREAKING CHANGE

The Topicmap JSON format has slightly changed. The topic's "visualization" property is now called "view".

    "visualization" -> "view"

See #505.