BUG: don't lose dtypes when concatenating empty array-likes
Merge pull request #5742 from immerrr/dont-lose-dtype-concatenating-empty-arraylikes

BUG: don't lose dtypes when concatenating empty array-likes
ENH: Add array_equivalent, to address the handling of NaNs when comparing arrays for equality.

Added NDFrame.equals

Index, Float64Index, and MultiIndex's equal method now uses array_equivalent
instead of np.array_equal.
Goal: do not deteriorate performance by a factor of 7
Let Index use np.arary_equal by default.
Add a new method, `equivalent`, for handling NaNs.
Try using isnan
BUG: The change in array_equivalent makes it not work on object arrays.

To to salvage some usefulness in NDFrame.equals, we must loop to check
each column of the NDFrame separately.
TST: Add a dataframe with object, float and datetime64[ns] columns, each containing NaNs.
TST: Add test for complex arrays
Add check for Int64Index
Using changes suggested by jtratner
Move test_equals to tests/test_generic.py
Revert index.py to master (Don't use array_equivalent)
Use isnull if left or right is an object array. Otherwise, use isnan.
Simplify array_equivalent.
BUG: fix merging errors:
     Remove head and tail from Series
     Remove stray "class TestDataFrame" line
TST: remove tests that won't pass without changes to Index equal method