Refactor currency exchanges

Move currency exchanging out of Shop and into InventoryHelper
Add takeVirtual and giveVirtual methods to ShopMaterial which
ShopCurrency overrides to deposit/withdraw player money,
replacing ShopCurrency.transfer.