Keep the std::exception* or std::type_info* in folly::exception_wrapper
Summary:
[Folly] Keep the `std::exception*` or `std::type_info*` in `folly::exception_wrapper`.
In the case of construction with a `std::exception_ptr`. Instead of keeping a pair of `std::string`s, strictly losing information (not that we use any more information, but theoretically we could).
Of note:
* Shrinks the size of `folly::exception_wrapper`, in all cases, to 48 bytes. Down from 32 bytes + 2 S bytes on 64-bit architectures, where S is the size in bytes of `std::string`. In particular, `libstdc++`'s implementation is 32 bytes, while `libc++`'s and Folly's implementations are 24 bytes on 64-bit architectures, for total original sizes of 96 bytes or 80 bytes.
* Allows to avoid rethrowing in `with_exception` in the case of an instance constructed with an `std::exception_ptr` plus an `std::exception&`.
Reviewed By: ericniebler
Differential Revision:
D4369935
fbshipit-source-id:
35155e0b271959a4878fe077fc911b17767a2358