`Cata` accepts inputs as well.

This adds more genericty and allows an `Arrow` instance.
Add cabal manifest and a license.