RxJS operator that wires an Observable's lifecycle to a ManualAsyncState.
On subscribe: sets loading (or refreshing if data was already loaded).
On next: calls setSuccess(value).
On error: calls setError(err) and re-throws (does not swallow).
The Observable passes through unchanged — tapAsyncState is a side-effect operator.