Block Registry - Feature Data

This is the new block registry stuff. Each feature @FeatureElement(Object) now returns a FeatureObjectRegistry which is pulled through the program. This means loaded features blocks are there, but unloadeds are not. This means there is no cheaty using of disabled features. A good idea is to create a blanket FeatureObjectRegistry that creates non-functional blocks for everything, which means you wont lose anything if you turn something off.

This also adds the FeatureDataCollector, an active feature component of the FeatureRepository. This saves all of the data from the Repository so that it can be nulled after it is used.