Summary:
The definition of `throwException()` is changed to add the `[[noreturn]]`
attribute for consistency with `std::rethrow_exception`. If the
`exception_wrapper` contains an exception, that is rethrown; if not, then
`std::terminate` is called.
An alternative design which threw an exception if the `exception_wrapper` did not contain an exception was rejected because of the ambiguity it introduced as to whether the exception thrown was wrapped or not.
Benchmarks before:
```
============================================================================
folly/test/ExceptionWrapperBenchmark.cpp relative time/iter iters/s
============================================================================
exception_ptr_create_and_test 1.45us 689.01K
exception_wrapper_create_and_test 4337.80% 33.46ns 29.89M
----------------------------------------------------------------------------
exception_ptr_create_and_test_concurrent 342.99us 2.92K
exception_wrapper_create_and_test_concurrent 101.41% 338.21us 2.96K
----------------------------------------------------------------------------
exception_ptr_create_and_throw 3.05us 327.89K
exception_wrapper_create_and_throw 140.22% 2.17us 459.77K
exception_wrapper_create_and_cast 8956.80% 34.05ns 29.37M
----------------------------------------------------------------------------
exception_ptr_create_and_throw_concurrent 372.68us 2.68K
exception_wrapper_create_and_throw_concurrent 102.54% 363.44us 2.75K
exception_wrapper_create_and_cast_concurrent 110.93% 335.97us 2.98K
============================================================================
```
and after:
```
============================================================================
folly/test/ExceptionWrapperBenchmark.cpp relative time/iter iters/s
============================================================================
exception_ptr_create_and_test 1.46us 684.09K
exception_wrapper_create_and_test 4368.84% 33.46ns 29.89M
----------------------------------------------------------------------------
exception_ptr_create_and_test_concurrent 341.20us 2.93K
exception_wrapper_create_and_test_concurrent 99.88% 341.60us 2.93K
----------------------------------------------------------------------------
exception_ptr_create_and_throw 3.08us 324.93K
exception_wrapper_create_and_throw 106.93% 2.88us 347.46K
exception_wrapper_create_and_cast 9532.05% 32.29ns 30.97M
----------------------------------------------------------------------------
exception_ptr_create_and_throw_concurrent 363.73us 2.75K
exception_wrapper_create_and_throw_concurrent 101.04% 360.00us 2.78K
exception_wrapper_create_and_cast_concurrent 104.50% 348.07us 2.87K
============================================================================
```
Reviewed By: yfeldblum
Differential Revision:
D3923939
fbshipit-source-id:
6fc58ac571e59e4122f1fbd194c678e3a3841057