Topic/coproduct and inject

I've added the functionality necessary to compose free monad.  This includes `Coproduct` and `Inject`.

@garyb I see you have [purescript-coproducts](https://github.com/garyb/purescript-coproducts). I'd be happy to refactor this PR to use that, but I just wrote a small implementation here for the moment.

Also, I am not tied to the location of `Inject`. Is it better if this exists on its own?