# Functions

AsyncPipe is similar to io.Pipe() except that writes isn't blocking, instead data will be added to an internal buffer that can grow up to specified capacity.
BlockedPipe is similar to io.Pipe() except the pipe is blocked until PipeReader.Unblock(n) is called to unblock n bytes.
BoundedReadAll will read up to maxBytes from r, and returns ErrFileTooBig if the file is larger.
BoundedReadFile will read up to maxBytes from filename, and returns ErrFileTooBig if the file is larger, and *os.PathError if file doesn't exist.
Copy from dst to src returning bytes written, write error werr and read error rerr.
CopyAndClose will copy from r to w and close w, returning the number of bytes copied and the first error, if any, this always closes regardless of error.
CopyAndFlush will copy src to dst flushing at given interval.
IsFileLessThan returns true if filePath is a file less than maxSize.
IsPlainFile returns an true if filePath is a plain file, not a directory, symlink, device, etc.
IsPlainFileInfo returns true, if info is for a plain file, not a dictionary, symlink, device, etc.
NopCloser wraps a io.ReadSeeker as ReadSeekCloser with Close being a noop.
NopConn wraps conn so that it provides a trivial implementation of net.Conn.
NopFlusher returns a WriteFlusher implementation that wraps w, with Flush being a no-op.
ReadAtMost will read at-most maxSize bytes from r and return an error if we didn't reach EOF.
WatchPipe will wrap an io.ReadWriteCloser such that onClose is called when the first read or write error happens, or after close() is called.
WriteNopCloser wraps an io.Writer and creates a io.WriteCloser where Close is a noop.

# Variables

ErrFileTooBig is used the indicate that a file is too big.
ErrMaxSizeExceeded signals that EOF wasn't reached instead max size was was read and, hence, we stopped reading.
ErrPipeFull is returned from AsyncPipeWriter.Write if the pipes capacity has been reached.

# Structs

AsyncPipeReader is a reading side of an AsyncPipe, similar to io.PipeReader.
AsyncPipeWriter is a writing side of a BlockedPipe, similar to io.PipeWriter.
PipeReader is a reading side of a BlockedPipe, similar to io.PipeReader.
PipeWriter is a writing side of a BlockedPipe, similar to io.PipeWriter.
TellReader is an io.Reader wrapper that can tell how much has been read.

# Interfaces

ReadSeekCloser implements io.Reader, io.Seeker, and io.Closer.
WriteFlusher is a combination of io.Writer and http.Flusher, basically a stream that can be flushed.