Pipes are no longer statically typed.

Instead, all pipes are now hybrids of a byte pipe and a channel.

This change still needs some working; for instance, now `put [] | cat` results
in a hang instead of error.