sp_WhoIsActive: Are Stats Cumulative for Session or Batch?
sp_WhoIsActive reports reads, writes, and CPU at the batch level as opposed to the session level. This is something that can be tested.

Session ID 57 has the following code in just a single batch:

SELECT MAX(t1.high + t2.high)
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);

WAITFOR DELAY '00:01:00';


Session ID 56 has the same code but split into two batches:

SELECT MAX(t1.high + t2.high)
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);

GO

WAITFOR DELAY '00:01:00';


Here's a screenshot of sp_whoisactive after both sessions have been running for a few seconds:



As you can see, those columns reset in session ID 56 because GO defines a new batch.

Waits aren't at the batch or the session level. It's a real time snapshot of what's happening with the query. It's not uncommon to see the wait_info column change wait types or durations while a query is executing.

Your final question is a bit too general for me to attempt an answer, but you could try reading through this resource.