Refactor the Translog.read(Location) method

It was only used by `readSource`, it has been changed to return a
Translog.Operation, which can have .getSource() called on it to return
the source. `readSource` has been removed.

This also removes the checked IOException, any exception thrown is
unexpected and should throw a runtime exception.

Moves the ReleasableBytesStreamOutput allocation into the body of the
try-catch block so the lock can be released in the event of an exception
during allocation.
today we ignore the mentioned exception in the engine, where its actually a real problem. We managed to find the entry in the transaction log, yet failed to read it, this can return potentially the wrong "latest value" for get. The code in the method to retrieve the source should not fail with IOEXception unless there is a real problem here, and this should propagate I think to the client.