Add ore dictionary support and recipes

This is basic API for custom crafting recipes, which do support ore dictionary. Ore dictionary and recipes are both created as services, and most files are interfaces. For recipe objects, I decided to use classes, as using constructor is really handy in this case.

Edit: I didn't use ServiceProvider or such things, should I have used?
MC's underlying recipe type doesn't have this information for *all* crafting recipies. It can tell you if a crafting grid matches it, but the recipe can do very different things.

For a vanilla example, the item repair recipe is a single one that matches any two identical damageable items.