Optimize ReadNDiscard for io.Seeker
Optimize ReadNDiscard for io.Seeker

ReadNDiscard is currently only called with one of two different types of
io.Reader: *bufio.Reader and *bytes.Reader

When passed a *bufio.Reader ReadNDiscard will assert its Discard method
and use this to avoid manually reading and discarding the data, which
can be slow.

Since *bytes.Reader does not have a Discard method, ReadNDiscard
currently falls back to the slow path instead of just skipping the data.

This commit extends the fast-path with a path for types implementing the
io.Seeker interface, which includes *bytes.Reader, by seeking for the
expected number of bytes, thus discarding them.

mediocregopher/radix.v3