What Unix Pipelines Got Right (and How We Can Do Better)