Simplify EOF handling, and don't check EOF for connectionPut

If the peer signals EOF using shutdown(SD_SEND) or TLS `bye`,
it can still wait for us to finish sending our data.

Also, tweak connectionGet to be more in line with Data.ByteString.hGetSome
and System.IO.hGetBufSome.  Do nothing if passed a size of 0, and
throw an exception if passed a size < 0.
Add connectionGetLine