Data.Conduit.Internal: use mutual recursion in pipe, pipeL, and connectResume

This is a purely mechanical transformation, mainly to improve readability:

 * Emphasizes how it runs the right pipe first, then when it needs input,
   it runs the left pipe in a very similar fashion.

 * More opportunities to eta-reduce.  This lets us say
   `PipeM (liftM recurse mp)` in both the left case and the right case,
   rather than `PipeM (liftM (\left' -> pipe' final left' right) mp)`

 * Avoids matching the right pipe repeatedly while running the left pipe.
   This might improve performance, but I haven't benchmarked it.
Data.Conduit.Internal: use consistent order in Pipe pattern matches
Merge pull request #91 from joeyadams/trivial-refactoring

Refactor some of Data.Conduit.Internal for readability