To evaluate the value of msg.sender when using solidity/assembly's delegatecall:
We start out with 3 contracts:
pragma solidity ^0.5.7;
contract ScratchPadActions {
event SenderActions(address contractAddress, address sender, address second);
function relay(ScratchPad2 second) public returns (address) {
emit SenderActions(address(this), msg.sender, address(second));