Update WeightedMobSpawnGroup.fromJson to throw exceptions

Now it throws InvalidConfigException when something goes wrong, instead
of logging it and returning an empty array. Added a test for the class.

Also added toString, hashCode and equals to WeightedMobSpawnGroup.
Avoid needless breakages of BO3Tools

One field had to be changed back to an ArrayList, and SpawnHeight must
still be SpawnHeightEnum.