Clean up channel transducer implementation

Put processing:
        try to give straight to a taker
        try to put it in the real buffer
        try to put it in the overflow buffer
        give up and just put it in the puts queue

Take processing:
        try to take from the real buffer
        try to take from the overflow buffer
        try to take straight from a putter (well, through the buffers)
        give up and just put it in the takes queue