BUG: adds validation for boolean keywords in DataFrame.set_index
ENH: Adds util._validators.validate_keywords_as_bool decorator

- [x] closes #16714
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

I've used a decorator so that we can check all the boolean kwargs at once rather than have a lot of lines of `validate_bool_kwarg` at the top of every method.