[pymorse] Complete rewrite of the pymorse bindings

This commit closes issue #216. Please refer to the issue for
discussion and a summary of the API changes.

Refer also to the new pymorse documentation for details.

In short:
- for each robot in the simulation, we dynamically create one object in the 'pymorse.Morse' instance
- this object itself contains one sub-object per component
- these sub-objects expose a datastream API, either read-only (for
  sensors): 'get', 'last', 'subscribe'; or write only (for actuators):
  'publish'.
- if exposed by the component in the simulator, RPC services are also
  available, as 'futures'. As a consequence, pymorse NOW REQUIRES
  PYTHON3. Note that cancelling a running service is currently not
  implemented.

Two unit-tests have been added in bindings/pymorse/ that cover most of
the new features.

This commit also introduces a new service 'simulation.details'. This
service returns the tree of robots, components, services, middlewares in
the current simulation
[pymorse] Added support for cancelling asynchronous actions

Simply call 'cancel()' on the future returned by the service call.

This should close issue #216
[pymorse] Make sure request are correctly matched to their response

Previously, the behaviour was undefined when two response arrived in row.
[pymorse] Get rid of the sock.makefile API

Because of buffering issue with 'readline', use directly the socket 'recv' and 'send' API

Should use fnctl.ioctl(sock, termios.FIONREAD) to know exactly how many bytes must be read
[pymorse] Handle PREEMPTED requests
[pymorse] Do not shadow exception in the Morse context manager

While here, properly cancel running asynchronous service
when an exception occurs.
[pymorse][testing] Update pymorse unittest

The unittest now check cancellation and preemption logics
[pymorse] Expose Stream.unsubscribe
[pymorse] Improve socket reading code

Previously, would fail for large messages (typically over TCP buffer size)
[pymorse] Normalize Blender obj name to get valid Python identifiers
[sockets] Fix case where several msgs are received in a row on a datastream
[sockets] Improve logging
[unit-tests] Update all unit-tests to pass with new pymorse API
[testing] Port more test to new pymorse
[testing] Cleanup import in test
[testing] Convert video_camera_diffimg_testing to new pymorse
[test] update camera test abs(sum) -> sum(abs)