Which Ethereum improvement proposal introduced a mechanism to limit the maximum amount of Ether that can be extracted from a contract call, reducing reentrancy risk?