Add a 2-product type.

This is the cleanest way to implement AppendLine in FileOperation
that I can think of right now.

This implements a 2-product which is isomorphic to the FunctionalJava
one *in the operations that we provide*. That is, this doesn't
implement everything the FJ one does, but the things we do implement
work like the FJ one (and NOT like Control.Comonad).

Signed-off-by: Ricky Elrod <ricky@elrod.me>