CLN: deduplicate __setitem__ and _reduce on masked arrays
For `__setitem__`, the only difference was that they both call to their own "coercing" function, so I made this available as a helper method, so it the rest of the implementation of `__setitem__` can be shared.

For `_reduce`, everything was the same, BooleanArray just has an additional check for `any` and `all`.