Caching plugin: update unselected objects (#547).

The Caching plugin no longer prevents updating topics/associations which are not selected (and thus appearing in the page panel).

A plugin can call `dm4c.do_update_topic()` and `dm4c.do_update_association()` for arbitrary topics/associations.

IMPORTANT: it is required that the topic's/association's last modified timestamp is stored in the `composite` property of the passed topic/association model.
Note: when retrieving a topic/association from the server, manipulating it in-place, and pass it back to dm4c.do_update_..() this requirement is already met.

IMPORTANT: in order a 2nd update request on the same object works the plugin must ensure to involve the up-to-date timestamp as contained in the response of the 1st update request. To enable a plugin to access this timestamp the `dm4c.do_update_topic()` and `dm4c.do_update_association()` methods now return the set of directives as received from the server. The plugin must scan the directives for `UPDATE_TOPIC`/`UPDATE_ASSOCIATION`.

Background is Edit Conflict Detection as introduced in DM 4.1.1. Edit Conflict Detection relies on an object's "last modified" timestamp. So a plugin who wants perform an update request must state the object "version" (in term of the timestamp) to which the request is bound. If there is meanwhile a newer version available on the server the request is rejected. This solves the "lost update problem". So, along with the feature of Edit Conflict Detection a plugin can no longer issue arbitrary update requests while possibly overridng changes performed by others.

CHANGES

1. New client-side event:
{{{
pre_submit_form(object, new_object_model)
}}}
   It is fired before the standard page renderers (Topic Renderer and Association Renderer) submits the form input. 2 arguments are passed:
    `object` -- the original object being edited (Topic or Association as received from the server, including e.g. its timestamps)
    `new_object_model` -- the object model build from the user's form input that is about to be send to the server.

2. `dm4c.do_update_topic()` and `dm4c.do_update_association()` return the set of directives received from the server.

3. `dm4c.page_panel.get_displayed_object()` is no longer a public method.

See #547.