Quick and dirty limited tagged union, because std.variant can't do recursive definitions

Retrieving the correct type is enforced by in contracts, so AssertErrors are thrown if the wrong type is attempted, and who knows what you'll get if you compile in release mode.

struct IniSetting {
SettingType currentType;
SettingValue values;