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.
Unfortunately this check is not the same as an `equals()` check so a `Set` doesn't buy you anything, unless we are willing to change `Message.equals()` which seems more dangerous.  Remember that the algorithm is only `O(n^2)` in the number of provisioning errors you have, so I am not really worried...