Cleanup of timeout behaviour and error messages in readPacket

This makes the timeout error messages more informative, as well as fixes the documentation to explicitly say what happens when a zero timeout is given (throws if there is no data readily available).