Preserve stack trace when using CacheOutputAttribute

To preserve exceptions in an async method, we need to re-throw exceptions as follows:
ExceptionDispatchInfo.Capture(ex).Throw();
See http://stackoverflow.com/questions/57383/in-c-how-can-i-rethrow-innerexception-without-losing-stack-trace