Dynamic recipe API

This PR provides the ability for Glowstone as well as modders to create dynamic recipes. These need to access NBT or damage values, and have massive numbers of combinations - making static recipes unhelpful.

The API is purposefully quite bare compared to Shaped and Shapless recipes, so that the implementation is easy.