fixes #15
- Use strongly typed errors internally - SafeToRetry(error) streamlines retry logic over ErrNoBytesSent - Timeout(error) removes the need to choose between returning a context and an i/o error
Using golang.org/x/xerrors type errors both errors can be exposed.