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.
What additional benefit do we get by declaring these members const? If users want to change them (don't know why either), why shouldn't we just let them do it? It's not like we protect a class invariant.