ENH: add BooleanArray extension array
Closes https://github.com/pandas-dev/pandas/issues/21778 
xref closed PRs https://github.com/pandas-dev/pandas/pull/22226 and https://github.com/pandas-dev/pandas/pull/25415, and xref the discussions on missing values in https://github.com/pandas-dev/pandas/issues/28095 and https://github.com/pandas-dev/pandas/issues/28778

This PR adds a BooleanArray extension array ("boolean" dtype):

- It uses the same mask-based approach as the IntegerArray: numpy array for the values + numpy array for the mask
- it does not yet implement any new NA behaviour as being discussed #28778, but for now follows the current NaN behaviour
- It is not yet "produced" from other extension arrays (eg a comparison method on IntegerArray, I would leave that for follow-up PRs)
- There is certainly a lot of code to share between this BooleanArray and IntegerArray (eg in a "BaseMaskedArray" base class), but didn't do that yet here (focusing on the BooleanArray for now)

