net_gen: more informative message in case of multiple outputs connected to a non-multiplex input
net_gen: remove the removal of cycles in the merge graph

This is code that was there before the cycle merge algorithm got
integrated. It was needed to try very very hard to avoid creating
cycles while merging. Since we do have the cycle merge now, it is
in principle not needed anymore.

It brings the merge algorithm complexity in the worst case of
having to merge the same network multiple times from more than
O(N^2) to something much closer to O(N). However, it does not
really provide a huge performance boost in other cases.
net_gen: remove the merge graph completely

The merge graph is really not needed anymore, since we don't transform
it.
net_gen: seed the algorithms with pure tasks

The compositions will *not* be merge-able until we've merged the
task contexts, so simply seed with TaskContext and its subclasses
and let the algorithm propagation go from there to the compositions
use the new Roby Plan#add* fastpath variants

These methods are much lower overhead than Plan#add, leading to
some improvement performance-wise since we don't need the graph
discovery functionality of Plan#add
add a fast path to add a mask to a DI / DIContext object

This is a very common operation during instanciation, and adding
a mask to an already resolved DIContext is actually very cheap. Add
a fastpath without the common DI resolution / normalization for this
special case.
improve performance of resolve_selection_recursively

The method was trying very hard to stick to duck-typing principles,
but was unfortunately doing a lot of work for naught because of this.
Namely, the recursive resolution can only apply to plain models
or bound data services that apply on plain models, but was calling
#to_component_model on e.g. InstanceRequirements or BoundDataService
objects that were pointing to InstanceRequirements.

Restrict the resolution to the object types we actually can do something
about.
net_gen: sort the merge candidates by their number of inbound connections

The tasks with a low number of inbound connections are more likely
to be easy to merge.