Updated Inventory and Container API

Added GetItemPlayerInventorySlot for retrieving what slot (if any) an
item occupies.

Added GetItemContainerSlot which does the same but for container slots.
Rewritten Craft extension

Crafting overhaul improves the way crafting sets are defined and makes
them more flexible. A crafting set can have more than just two input
items and the interface has been simplified.

"Combine" option in inventories and containers is now all that's added
(no more separate item lists). Pressing combine simply adds the item to
an internal list, if the list matches a recipe then the result item is
created. "Combine" button updates to inform the user what they are
combining with.

Combination list is reset when the container or inventory is closed.
Slight internal change to OnPlayerUseItemWithButton

This change allows return values to dictate the behaviour of using items
with buttons. Previously, any item>button use would halt processing of
Internal_OnPlayerUseItem completely, now that only happens if
OnPlayerUseItemWithButton returns 1.