BUG: do not cast ints to floats if inputs of crosstab are not aligned
 - [x] closes #17005
 - [x] tests added / passed
 - [x] passes ``git diff master -u -- "*.py" | flake8 --diff``
 - [x] whatsnew entry

... plus some trivial refactoring.