Track per-request allocated bytes.

As more and more data-structures are implemented on top of BigArrays, we can
add byte tracking on top of BigArrays in order to get a picture of how many
bytes have been allocated by the current request.

A potential follow-up to this change would be the ability to fail requests that
allocate too much memory instead of letting them cause out-of-memory errors on
the cluster.

Close #6016