Generalize `recv` and `send` to use `MonadIO`
Use MonadIO instead of IO in positive arguments
Use `Control.Monad.Catch` from the `exceptions` package where useful
Merge pull request #2 from k0001/generalize

Generalize IO