CLN: Improve Exceptions in core/frame and testing in test_frame and test_multilievel

More specific Exceptions (and better testing for them) through a number of parts of pandas. In particular, in `core/frame` / tests/test_frame and tests/test_multilevel Associated changes in some other parts of pandas to support it (mostly making sparse have the same exceptions as core/frame).

* nearly everything that was a `TypeError` now checks message (to avoid `TypeError` confusion from changes in signature).
* refactored some test methods and changed some places to use `assertRaises` and `assertRaisesRegexp` as context managers.
* core/reshape no  longer uses a specific `ReshapeError` (which wasn't really being used anywhere)
* marked guard test cases with `# pragma: no cover` to hopefully make it easier to use coverage.
* new `raise_with_traceback` method in `compat` which allows for 2/3 compatible preservation of traceback.

Obviously some squashing to come.

Related to #3954.