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.

This is not a huge change - but anyone want to look over it? 
 looks ok to me

the data conflic error in update is odd
maybe make an issue to have someone look at it (I think I understand the rationale but needs a look)
 It is weird. I wanted it to inherit from `ValueError` to ease the transition to it (probably) becoming a `ValueError`. Really sticks out (especially because we don't use it _anywhere_ internally).
 prob just something vestigial - just change to valueError (which I think u did)?
 +1 for `ValueError`...is this used anywhere else?
 nowhere. All three uses are: the definition of the exception, in update and in the test cases :P. I'm happy to remove it (right now it's just a subclass of ValueError).
 out of there
 cut---it---out :scissors: 
 okie dokie, goodbye `DataConflictError`. Any other comments?
 (raise_with_traceback is pretty awesome. as is this pr)
 @hayd thanks! :smile: and thanks for catching those mysterious test removals! I spent some time removing obvious dups but definitely didn't want to remove things arbitrarily!
 @hayd I think it's good at this point, if you want to take a final look...
 Pretty tricky to spot if you've any other missing, but if you've checked then I'm happy.

Also, re raise_with_traceback please consider answering this SO question: http://stackoverflow.com/questions/17001473/uncatching-an-exception-in-python :)
