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 and set_names methods to index

Similar to other set_* methods...allows mutation if necessary but
otherwise returns same object.
TST: Fix assert_almost_equal to handle non-ndarrays
DOC: Document names, levels, labels, etc...
ENH: Make Exceptions to be more descriptive

CLN: core/index: remove bare exceptions
REMOVEME (eventually): Leave comments on Exception changes.
CLN/TEST: Create an ImmutableIsh container for Index levels, etc
CLN: Move optional args to util/decorators + PEP8

PEP8 util/decorators and util/testing
Fix import in tests
CLN: core/index PEP8 + code cleanup
ENH: Add a FrozenList type to core/common + tests
ENH: Use FrozenList for levels, labels in index
CLN: PEP8 test_index.py
TST: Fix test_mixed_panel to reflect true name behavior