Allow posix.system to take a function, a shell command, or a file and
list of arguments. Use it in pipeline.

Allow pipeline functions to take an extra parameter giving the
function to use to make a pipe (e.g. so posix.openpty can be used
instead). Change argument to a table rather than a list of tasks.