Add a util::Task class to manage async operations.

This method is prone to get called many times in a row (hence my also trying to avoid taking the lock), when figuring out what happened to the async operation. The value is also "sort of const": it's invalid for a while, then once it's written to, it does not change value for the rest of the life of the object. By the comment on this, we say that it's not valid to call this method when ```status_``` is not yet updated, but once updated, a const reference is fine, in my opinion.