ISPN-3094 Cache.putForExternalRead in DIST transactional mode is not replicated to other members

* Refactor PutForExternalReadTest into a hierachy to test combinations of REPL/DIST mode and various tx modes
* Move method visitPutKeyValueCommand() and supporting methods of non-tx locking and distribution interceptors to the common base class of their hierarchy and delegate to super if PUT_FOR_EXTERNAL_READ flag is set. This ensures non-tx behaviour for PFER even if the interceptor is tx capable.
* This refactoring also fixes ISPN-3114 because putForExternalRead is now handled in the non-tx code which does not try to cast the context to a TxInvocationContext.
Refactor BaseDistStateTransferConsistencyTest and BaseReplStateTransferConsistencyTest with their respective subclasses into a single class to include all tests

* The new tests now also cover distributed mode on join (previously only leave was tested for DIST mode).
* DistStateTransferOnJoinConsistencyTest.testReplacePessimistic fails due to ISPN-3095.
ISPN-3095 Cache.replace() succeeds on originator but fails randomly on remote owners during state transfer in DIST mode with pessimistic locking

* TxDistributionInterceptor.ignorePreviousValueOnBackup() should return true also for pessimistic case
* This makes DistStateTransferOnJoinConsistencyTest.testReplacePessimistic() pass