Add support for providers.

If providers = true, all bound parameters are wrapped in Provider<>
elements (unless they're already defined as Providers).

Also fix @Singleton ending up in the wrong place, and an NPE
when running a second cycle.

Change-Id: I0bf10cae9ae2a1d09209daa8817216fad35d9241