If an exception is thrown during Singleton creation, remember the thrown exception and re-throw later if we attempt to inject again.
This ensures that a Singleton can never be observed in two different states - imagine a nondeterministic constructor that throws on call 1 and succeeds on call 2.
If the same exception is thrown more than once, only note it once in Errors.

Fixes #676
A few tests have explicit checks for duplicate singleton injection, fix.