Tracks all gas operations for a single transaction.
This is the main entry point for gas accounting.
All the information about gas is stored in this object.
The objective here is two-fold:
1- Isolate al version info into a single entry point. This file and the other gas
related files are the only one that check for gas version.
2- Isolate all gas accounting into a single implementation. Gas objects are not
passed around, and they are retrieved from this instance.