Fix use of reserved word for variable name in pipeThrough.

`in` is a reserved word, so that destructuring wasn't going to work. See #63 for where this was raised; we'll repurpose that bug into a discussion of whether to change the name or keep it.
Add some type/shape checking for pipeThrough.
Use ES6 defaulting semantics in reference implementation.

`undefined` is the default-triggerer, not falsy values or presence in the object.