BUG: factorize_from_iterables applies type to empty iterables
#### Code Sample, a copy-pastable example if possible

```python
In [1]: import pandas as pd

In [2]: A = pd.MultiIndex(levels=[[], []], labels=[[], []], names=['a', 'b'])

In [3]: B = pd.MultiIndex.from_arrays(arrays=[[], []], names=['a', 'b'])

In [4]: A
Out[4]:
MultiIndex(levels=[[], []],
           labels=[[], []],
           names=[u'a', u'b'])

In [5]: B
Out[5]:
MultiIndex(levels=[[], []],
           labels=[[], []],
           names=[u'a', u'b'])

In [6]: pd.testing.assert_index_equal(A, B)
...
AssertionError: MultiIndex level [0] are different

MultiIndex level [0] classes are not equivalent
[left]:  Index([], dtype='object', name=u'a')
[right]: Float64Index([], dtype='float64', name=u'a')
```
#### Problem description

Empty iterables should be factorized to object types rather than `Float64Index`. This causes MultiIndexes created from the constructor to not equal those created using `.from_arrays`, which relies on factorization (ref PR #16782).