Shuffler.Shuffle: Numerous fixes and add set_wrap_callback().
The fixes include:
- Fixed broken end-of-stream detection for d_source_pikestream.c.
- Reduce memory footprint of source-structs by half.
- Fixed memory corruption issues because a memcpy was used on
- Eliminated all dynamic memory allocations in the shuffler.
For file-descriptor based streams it still has a fixed overhead of 16KB
per stream, for all other streams the overhead now is close to zero.
- Reduce the memory overhead for fd-based streams by half; it uses
double buffering now, it could trivially be reduced to use a single