Have pipes attempt to flatten any child pipes they have

If we have e.g. an abbreviated algorithm, that will end up being its own pipe
even when this isn't neessarily desirable. By flattening in pipe::init, we
reduce the number of extraneous transforms in project, and Stream::init can
do a better job of reinterpreting as well.
Merge pull request #93 from biometrics/pipe_reinterpret

Have pipes attempt to flatten any child pipes they have