Copy overlapping completed transactions during rotation.

During rotation we copy transactions that have not completed to the next
log. We also copy transactions that finished after the start of the
first incomplete transaction. In some cases the transaction that
finished after the start of the first incomplete transaction was started
before the start of the first incomplete transaction, in these cases the
body of that transaction needs to be found and extracted from earlier in
the log. When that code path executes it copies the transaction body
from earlier in the log to an InMemoryLogBuffer then reads the commands
of the transaction from that InMemoryLogBuffer to copy the transaction
into the new log. Reading the transaction from a buffer requires a
cursor to be created over that LogBuffer. This cursor used to be created
by reading from the underlying StoreChannel of the LogBuffer, but an
InMemoryLogBuffer does not have a StoreChannel, something that would
cause failures to rotate the log in these circumstances. Creating a
cursor only requres a ReadableByteChannel, an interface that the
InMemoryLogBuffer supports natively. This changeset solves the issue in
rotating transaction logs by introducing a new method to the LogBuffer
interface for getting only a ReadableByteChannel that
InMemoryLogBuffer can support by returning `this`, and other
implementations can support by returning the StoreChannel as before.

This changeset also updates the naming in the PartialTransactionCopier
to clarify the responsibilites of the various classes, methods, and
fields in there.
Merge pull request #2621 from thobe/2.1-rotation-fix

Copy overlapping completed transactions during rotation.