In `Goldivault.redeemYield()`, users can redeem more yield tokens using reentrancy
Possible reentrancy in `Goldivault.redeemYield()` if `yieldToken` has a `beforeTokenTransfer` hook.\\nLet's assume `yt.totalSupply` = 100, `yieldToken.balance` = 100 and the user has 20 yt.\\nThe user calls `redeemYield()` with 10 yt.\\nThen `yt.totalSupply` will be changed to 90 and it will transfer `100 * 10 / 100 = 10 yieldToken` to the user.\\nInside the `beforeTokenTransfer` hook, the user calls `redeemYield()` again with 10 yt.\\nAs `yieldToken.balance` is still 100, he will receive `100 * 10 / 90 = 11 yieldToken`.\\n```\\n  function redeemYield(uint256 amount) external {\\n    if(amount == 0) revert InvalidRedemption();\\n    if(block.timestamp < concludeTime + delay || !concluded) revert NotConcluded();\\n    uint256 yieldShare = FixedPointMathLib.divWad(amount, ERC20(yt).totalSupply());\\n    YieldToken(yt).burnYT(msg.sender, amount);\\n    uint256 yieldTokensLength = yieldTokens.length;\\n    for(uint8 i; i < yieldTokensLength; ++i) {\\n      uint256 finalYield;\\n      if(yieldTokens[i] == depositToken) {\\n        finalYield = ERC20(yieldTokens[i]).balanceOf(address(this)) - depositTokenAmount;\\n      }\\n      else {\\n        finalYield = ERC20(yieldTokens[i]).balanceOf(address(this));\\n      }\\n      uint256 claimable = FixedPointMathLib.mulWad(finalYield, yieldShare);\\n      SafeTransferLib.safeTransfer(yieldTokens[i], msg.sender, claimable);\\n    }\\n    emit YieldTokenRedemption(msg.sender, amount);\\n  }\\n```\\n
We should add a `nonReentrant` modifier to `redeemYield()`.
Malicious users can steal `yieldToken` using `redeemYield()`.
```\\n  function redeemYield(uint256 amount) external {\\n    if(amount == 0) revert InvalidRedemption();\\n    if(block.timestamp < concludeTime + delay || !concluded) revert NotConcluded();\\n    uint256 yieldShare = FixedPointMathLib.divWad(amount, ERC20(yt).totalSupply());\\n    YieldToken(yt).burnYT(msg.sender, amount);\\n    uint256 yieldTokensLength = yieldTokens.length;\\n    for(uint8 i; i < yieldTokensLength; ++i) {\\n      uint256 finalYield;\\n      if(yieldTokens[i] == depositToken) {\\n        finalYield = ERC20(yieldTokens[i]).balanceOf(address(this)) - depositTokenAmount;\\n      }\\n      else {\\n        finalYield = ERC20(yieldTokens[i]).balanceOf(address(this));\\n      }\\n      uint256 claimable = FixedPointMathLib.mulWad(finalYield, yieldShare);\\n      SafeTransferLib.safeTransfer(yieldTokens[i], msg.sender, claimable);\\n    }\\n    emit YieldTokenRedemption(msg.sender, amount);\\n  }\\n```\\n