This fixes a long-standing TODO, and a major inconsistency that for different caches, "commitment" reserves from different pools, so any two aren't necessarily convertible. The new system introduces a virtual method "TakeCommitmentFrom", which allows the VM's cut_area routine to behave as it did previously.