improving streams passing to pipe

- macro allows code to deal with array instad of va_args
- macro performs args checking which creates better stacktrace in case of error
improved pipe macro to give compile time warning when not enough streams are passed