PERF: enhance HDFStore Table writing performance

CLN: removed is_searchable (no longer needed)
BUG: Fix Panel instance variable namespace issue GH3440
Merge pull request #4459 from danbirken/panel-instance-name-fix

BUG: Fix Panel instance variable namespace issue GH3440
BUG: values array for non-unique, interleaved cols incorrect
Merge pull request #4460 from Komnomnomnom/frame-dupe-cols

BUG: values array for non-unique, interleaved cols incorrect
Merge pull request #4457 from jreback/hdf_opt

PERF: enhance HDFStore Table writing performance
BUG: bug when using chunksize and writing ndim > 2
Merge pull request #4462 from jreback/hdf_opt2

BUG: bug when using chunksize and writing ndim > 2
ENH: allow where to be a list/array or a boolean mask of locations (GH4467)
Merge pull request #4470 from jreback/hdf_coord

ENH: allow where to be a list/array or a boolean mask of locations (GH4467)
TST: Add assert_copy and fix assert_almost_equal

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: Fix assert_almost_equal to handle non-ndarrays (previously failed
after iterable check)

TST: Fix test_mixed_panel to reflect true name behavior

TST: Make drop names test better.
ENH: Make core/index exceptions more descriptive
BUG: Give MultiIndex its own astype method

Fixes issue with set_value forgetting names.
BUG: Fix names handling in MultiIndex

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

* `names` is now a property *and* is set up as an immutable tuple.
* `levels` are always (shallow) copied now and it is deprecated to set directly
* `labels` are set up as a property now, moving all the processing of
  labels out of `__new__` + shallow-copied.

TST: Add names tests, motivating example from #3742, reflect tuple-ish
output from names, and level names check to reindex test.
ENH: Add FrozenList and FrozenNDArray types

* `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: Have index inherit from FrozenNDArray

Index inherits from FrozenNDArray now and also returns a shallow copy
through deep copy (otherwise, could deepcopy and change metadata).
Assumption is that underlying array is still immutable-ish
ENH: Levels, labels immutable + add set methods.

ENH: Use FrozenList for levels, labels in index

ENH: Add set_levels, set_names and rename to index

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

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: Actual deprecation of direct setting of levels and labels
ENH: Index.copy() now takes keyword arguments.

Index derivatives can set `name` or `names` as well as
`dtype` on copy. MultiIndex can set `levels`, `labels`, and `names`.
DOC: Changes to Index and MultiIndex
CLN: PEP8 all over the place