BUG/TST: test fixes for windows compat
Merge pull request #4123 from jreback/win_bug

BUG/TST: test fixes for windows compat
BUG: Fix names handling in MultiIndex

ENH/BUG: Make names, levels & labels properties.

* `names` is not a property *and* is set up as an immutable tuple.
* `levels` are always (shallow) copied now and it is now not possible to set levels
directly (internal consumers should use `_set_levels` to access. You are
discouraged from setting `_levels` directly).
* `labels` are set up as a property now, moving all the processing of
  labels out of `__new__`
TST: Add `assert_copy` to test for copied-ness.

You can use `assert_copy` to check that two iterables produce copies
that are not the same object. (uses `assert_almost_equal` under the
hood).
TST: Add names tests to test_index + PEP8

TST: Test that name changes occur properly

TST: Fixup test cases to reflect tuple output from names, etc.

TST: Add motivating example from #3742
TST: Change tests to check against tuple rather than list
TST: Change mutating tests to use set_names and set_levels
TST: Add level names check to basic reindex test
CLN: Changes to handle levels and labels as tuples

(mostly just using list or tuple as necessary)
ENH: Add set_levels, set_names and rename to index

Similar to other set_* methods...allows mutation if necessary but
otherwise returns same object.

ENH: Add rename method to index
TST: Fix assert_almost_equal to handle non-ndarrays

Fix import in tests
ENH: Make core/index exceptions more descriptive

CLN: core/index: remove bare exceptions
ENH: Add FrozenList and FrozenNDArray types

ENH: Add a FrozenList type to core/common + tests

ENH: Add FrozenNDArray and refactor FrozenList

* `FrozenNDArray` - thin wrapper around ndarray that disallows setting methods
  (will be used for levels on `MultiIndex`)
* `FrozenList` - thin wrapper around list that disallows setting methods
  (needed because of type checks elsewhere)

TST: Additional test cases for immutable containers

ENH: Add FrozenNDArray class

CLN: Add Frozen* tests to tests/test_base
CLN: Change labels and levels to be mostly immutable.

ENH: Use FrozenList for levels, labels in index

Labels are now converted to `FrozenNDArray` and wrapped in a
`FrozenList`. Should mostly resolve #3714 because you have to work to
actually make assignments to an `Index`.

ENH: Deprecate direct setting of levels and labels
TST: Fix test_mixed_panel to reflect true name behavior
CLN: Use set_names instead of mutation.

CLN: core/generic - use set_names instead of names attribute

CLN: io/parsers - use set_names instead of mutation

CLN: Make tools/pivot use immutable set_names
CLN: MultiIndex should use setter method too
BUG: Give MultiIndex its own astype method

fixup to astype

various test fixups (prob just combineme)

Fixes issue with set_value forgetting names.
ENH: Allow Index.copy() to take keyword arguments

Index derivatives can set `name` or `names` as well as
`dtype` on copy. MultiIndex can set `levels`, `labels`, and `names`.
ENH: Have index inherit from FrozenNDArray