Add a reflection based system for nbt storage.

- The system uses java annotaions to determine which values to store
- Reduces the amount of code neccesary for implementing tile entities and items with custom nbt data.
- Also adds a nifty nbt helper even though it'll mostly be used in the new nbt system