If user would want to come up with some special logic when a missing config item is requested, they wouldn't be able to at the moment as we throw different exceptions based on how a config item is being requested:
[ ] base exception class is needed. It is recommended to not namespace exception class name i.e. Error instead of ConfigError, but wouldn't it be cleaner to put exception class inside Config? -- Config.Error? Would have to be on BaseSection. The more we add to BaseSection, the more we limit user in what sections they would be able to access via attribute access.