Improved the speed of input pipes

I discovered that `Data.ByteString.hGetN/hGetSome` return an empty `ByteString`
when they encounter end of input, and testing the `ByteString` for `null` is
more efficient than calling `hIsEOF`, so you can greatly improve the speed of
`stdin`, `hGet`, `hGetSome`, and `hGetN` by switching the test to `null`.  This
improves IO speed by about 60-70% on some informal benchmarks.