Make OreDictionary.itemMatches symmetric

Since OreDictionary.itemMatches is technically an equals method for
ItemStacks, it should also match Java's specification for equality as
defined in Object.equals. It is now both symmetrical and transitive.
That means that the order of the arguments doesn't matter anymore.
Move MerchantRecipe.hasSameIDsAs to ForgeHooks
Fixed Vanilla incompatibilites