REF: implement mask_setitem_value
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [ ] whatsnew entry

cc @phofl I think this is what is needed to get #40380 working (https://github.com/pandas-dev/pandas/pull/40380#discussion_r680289744), could use your input when you have a chance.

This only does the masking for the non-tuple case.  Need to figure out if we can construct test cases that require the masking with tuples.