Make OP_REQUIRES_OK* macros work correctly regardless of lifetime of the status argument.
Make OP_REQUIRES_OK* macros work correctly regardless of lifetime of the status argument.

This corrects earlier changes to OP_REQUIES_OK and OP_REQUIES_OK_ASYNC (e.g. CL/330823151), which took a reference but did not extend the lifetime of potential intermediate temporaries. This would cause problems in situations where a short-lived status was passed in as something other than a prvalue, for example:

  struct T {
    const absl::Status& f() const { return s; }
    absl::Status s;
  };

  OP_REQUIRES_OK(T().f());

This becomes

  const absl::Status& _s(T().f());

which is instantly a dangling reference.

To fix this, we move operations on user-provided arguments into a helper function, and ensure that the user-provided arguments are only used inside a single function call expression. All temporaries remain alive for the duration of the function call.
