Use Delegator trait instead of abstract class, apply signature changes to ReadStream, WriteStream & AsyncFile

Note: the signature of Pump.newPump() is not satisfactory.