[3.0] Abstracted Some Definition Code

Now, when we define a definition, we store it as a Definition instance in an array, instead of being split across two arrays. This new definition class is also responsible for working out what group the model is in, and what it's actual class name is.