MonadZip instance for CofreeT

Add an instance of `MonadZip` for `CofreeT` by generalising the instance definition for `Cofree`.

```haskell
instance (Alternative f, MonadZip f, MonadZip m) => MonadZip (CofreeT f m) where
  mzip (CofreeT ma) (CofreeT mb) = CofreeT $ do
    (a :< fa, b :< fb) <- mzip ma mb
    return $ (a, b) :< (uncurry mzip <$> mzip fa fb)
```

The proofs for both `MonadZip (CofreeT f m)` and `MonadZip (Cofree f)` are provided in a similar manner to what @vklj did for issue #43.