Adjusted Shift code to support Phantom slots

Yes, this also was stolen from Railcraft. Its also much more robust than
the code BC was using.
Transactor Optimization

It was an O(n^2) operation to insert an item. Now its just O(n). The
functions for checking to see if a stack is valid in a slot are
expensive and should never be called more than once per slot, let alone
n^2 times (where n is the length of the inventory).

Additionally, by wrapping inventory in a slot iterator, I was able to
eliminate the need to handle FSided and VSided differently from
IInventory.