Doing `throw <myExceptionVariable>` causes the stack trace information
to be rewritten (we don't want this). Wrapping in a new exception object
like `AggregateException` fixes that but also makes the printed
exception look messier.
Instead, simply return a bool to indicate if `HandleException()`
processed the the exception; if not, then we can rethrow from outside
the method.
Two separate duplicate checks have been introduced:
1. Within the same YAML file, YamlDotNet has been instructed to error on
duplicate keys.
2. Between different YAML files, custom logic enforces that there should
be no duplicate instance names.