relayer: simulate transaction and check return value before submitting transaction
The relayer currently performs signature checks and other checks before submitting a tx, but it does not actually check whether the internal call to `claimRelayer` will succeed before submitting the tx, possibly resulting in wasted gas if the internal call fails.

Note that even if the internal call fails, the tx will NOT revert, so it will not be caught by `EstimateGas` etc.

To check if the internal call to `claimRelayer` will succeed (on the current head block), we need to call `ethclient.CallContract` (https://pkg.go.dev/github.com/ethereum/go-ethereum/ethclient#Client.CallContract) simulating the tx and checking the abi-encoded return value, which will be the return value of `forwarder.Execute()` https://github.com/AthanorLabs/go-relayer/blob/master/impls/gsnforwarder/contracts/Forwarder.sol#L64 
The `success` bool returned will tell us whether the call to `claimRelayer` succeeded or not.