Simplified some allocation and data moving paths and fixed a couple of
slices out of bound. Also, make Receive wait for data for the requested
channel instead of returning CHANNEL_IGNORED.