BUG/TST: Empty input arrays in cartesian_product and MultiIndex (#12258)
- [x] closes #12258
- [x] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [x] whatsnew entry

This commit:
1. fixes logic (and division by 0) in `cartesian_product` when some input arrays are empty
2. adds tests for MultiIndex empty level  construction with `.from_arrays` and `.from_product`

## [Current coverage](https://codecov.io/gh/pydata/pandas/pull/14151?src=pr) is 85.26% (diff: 100%)

> Merging [#14151](https://codecov.io/gh/pydata/pandas/pull/14151?src=pr) into [master](https://codecov.io/gh/pydata/pandas/branch/master?src=pr) will increase coverage by **<.01%**

``` diff
@@             master     #14151   diff @@
==========================================
  Files           140        140          
  Lines         50579      50593    +14   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          43121      43137    +16   
+ Misses         7458       7456     -2   
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [7dedbed...b831516](https://codecov.io/gh/pydata/pandas/compare/7dedbed8988db9dc6453320383202bf97deaf14a...b83151619379435b3a8236d9de378eb5b263768b?src=pr)
 ping when updated / green.
 @jreback Sorry for the delay. I'll try to get to it before the weekend. 

I think I'll have to touch also `_factorize_from_iterable(s)` - they have small issues with empty or incorrect inputs.
 @jreback It took me longer than I expected.
Added some checks and tests for incorrect input.
