fix potential string corruption in udict
pass flow definitions out of band

This commit aims at simplifying and extending the struct upipe API:
 - upipe_foo_alloc functions now accept optional arguments
 - since we decided the flow def cannot change on an allocated pipe,
   the flow def is now passed upon its creation
 - a pipe requesting a flow definition is allocated with upipe_flow_alloc,
   otherwise upipe_void_alloc (custom allocators are possible)
 - two helpers were created for the pipes, upipe_helper_flow and
   upipe_helper_void
 - a pipe announces a new flow definition on its output with UPROBE_NEW_FLOW_DEF
 - the flow definition of the output of a pipe may also be read with
   UPIPE_GET_FLOW_DEF
 - UPROBE_READ_END and UPROBE_WRITE_END were renamed UPROBE_SOURCE_END and
   UPROBE_SINK_END, respectively
 - new upipe_helper_bin, to support pipes that implement a sub-pipeline
   of several pipes internally
 - new upipe_proxy module, useful as the input of a split pipe, to notify it
   of the release of the last writer