Webclient: open menus with ENTER or SPACE (#534).

When a menu button has focus its menu can be opened by pressing ENTER or SPACE.
Thanks, Malte, for reporting.

One issue remain: because in a just opened menu no item is focused pressing ENTER/SPACE (which normally selects the focused item) in this situation throws a client-side error.

Extend docu for GUIToolkit Button.

See #534.
Webclient: DOM measurement + CSS Tweaks (#543).

- The JavaScript width calculations involve actual DOM measurement instead of hardcoded pixel constants. As a consequence 1) the Webclient geometry adapts to all browsers automatically, and 2) changing certain CSS paddings/margins do not require adaption of the JavaScrípt.

- All menus have the same font size.

- The page panel has a right padding.

See #543.
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.
Merge branch 'master' into pax-web