Added extract_traceback function

Create a C++ traceback from a boost::python object. Refactored get_exception_info() to return a struct of boost::python::objects instead of a tuple with magic knowledge in it. Also refactored and modularized tests some more.
As with the version struct, I have trouble imagining why anyone would ever need to modify these members. I propose that we make them const. If users ever provide a compelling reason to make them mutable we can do so; we can't so easily go the other direction.