Currently I have two search heads with 20 gb licenses each in two different environments. If I wanted to move 2 gb from one search head to the other. Is that possible? How would this be accomplished?
You could distribute the licencing, but first you would need to aggregate it on a master licence server serving both environments, and then redistribute it by pools.
Also, this pre-supposes that the different environments don't represent different legal entities, and that by doing so you are contravening the terms of both licences. Of course that's a legal restriction, not a technological one.
The licenses are installed on individual search heads OR you use a license master node to maintain the license.
If they are using license master node already, you can configure pool and do custom allocation. If they are not using license master node currently, think of making one node as license master and again use pools to do custom allocation. See more details here in the SPlunk documentation
http://docs.splunk.com/Documentation/Splunk/6.2.4/Admin/HowSplunklicensingworks