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.
Can you explain why we need to add this?  It isn't clear to me, since the code used to handle the initial exception fine... I'm not sure why rethrowing an older exception would suddenly need this.