socket_io_socket: fix fetch loop: use _fetch_source on xs_fetch event
socket_io_server(): test disconnection_timeout before clearTimeout
pipelet.js: implement map_reduce(): ...
  - plug(): process no_add option
  - implement unplug()
  - implement map_reduce() pipelet, documentation from the code:

     source.map_reduce( branches, compose [, options ] )

     Maps a source data-flow over a number of branches, then reduces the output of these
     branches to produce 'this' destination:

               Map              Reduce
                |                  |
                |---> branch 0 --->|
                |                  |
     source --->|---> branch i --->|---> destination
                |                  |
                |---> branch n --->|
                |                  |
            xs.fork()         xs.union()

     Map is implemented using xs.fork(), while Reduce uses xs.union().

     Applications:
       - Send a server data-flow to a number of clients connecting to the server with some
         socket protocol such as WebSockets, socket.io, or plain Unix sockets. Client dataflows
         are then collected back to the server and sent to 'this' destination.

       - Distribute a workload horizontally over multiple processes, servers, or worker
         threads using a Map/Reduce pattern.

     Parameters:
       - branches: (Pipelet) controls branches creation and removal. Each add operation spawns
           the creation of a new branch, while remove operations remove branches. Each branch
           has attributes:
             - id: (scalar) unique identifier for the branch
             - any other attribute required by compose()

       - compose: function( source, branch, options ), a function that is called when each
           branch is created and which is supposed to process the data-flow coming from the
           source. The composition returns its destination or undefined if it has no
           destination.

           The compose function will be called with the following parameters:
             - source : (Pipelet) the source for this branch
             - branch : (Object) the branch that spawned this pipelet from branches
             - options: (Object) the options of this map_reduce pipelet

           'This' context of compose is the map_reduce pipelet instance.

     Example:
       A trivial socket.io server with zero security, delivering the content of a database to
       a number of web clients, and allowing these clients to update that same database. In
       this example, branches are socket.io clients:

         var clients = xs
           .set( [ { ip_address: '0.0.0.0', port: 80 } ] )
           .http_servers()
           .socket_io_servers()
         ;

         xs.database()

           .trace( 'database changes to clients' )

           .map_reduce( clients, create_client )

           .trace( 'database changes from clients' )

           .database()
         ;

         function create_client( source, client, options ) {
           return source.plug( client.socket );
         }

       Note that to add proper authorizations, one would only need to filter the source and
       output to and from clients sockets.
socketio test: add trace and set to force fetch operation through
http tests: socket.io server tests using map_reduce() and plug() and traces
package.json: version 0.0.35: first version supporting a functional dataflow over a socket.io server and client