[io] Optimization of I/O when using pipes
With the introduction of communication via pipes between the user process and the daemon, it may happen that a chunk of data is decoded from a baseformat and then re-encoded (into a baseformat) to send it through pipe. This is the case, when next() is called: a chunk of data is then read using a CachedDataSource (that will decode from a baseformat) and then sent through a pipe (and hence will be re-encoded into a baseformat). This is of course suboptimal and may be fixed by specializing the CachedDataSource.