Avoid duplicate failures if a Singleton fails to create

Current behavior:

If a Singleton cannot be created, it will re-attempt at every injection point.  In `Stage.PRODUCTION`, this is guaranteed wasted work -- the injector creates all Singletons eagerly, and any failure causes Injector creation failure.  In `Stage.DEVELOPMENT`, it's a bit more confusing as we may fail later at runtime, which conceivably allows us to 'recover' from this sort of error.  I would argue this is more a bug than a feature -- it allows multiple partially-created Singleton instances to leak (if you do so from the `Provider` or constructor) and is guaranteed to break later if you ever use `PRODUCTION` mode.

New behavior:

The exception thrown while creating the Singleton is saved and reused at every further try to inject it.  Duplicate exceptions are suppressed from `Errors` to ensure the end user only sees the true cause once.
It doesn't look like this change has anything to do with fixing singletons from being recreated after an exception.  Please remove or add comments explaining why it's necessary to do this.