Wrap errors with grpc context
Currently we create a new gRPC status when decorating errors with gRPC codes. This has the downside of losing the original type when decorating an error with a gRPC status code. This commit wraps the original error with gRPC context and allows for accessing the original error by unwrapping it.