Netflix/denominator — pull request #147 by adriancole (2013-05-22 18:30:39+00:00)
Title: reduce dagger complexity and enforce compile phase on providers

Dagger module complexity was higher than necessary due to some meta-programming used to detect which credentials supplier should be used per-provider.

Meta-programming is an anti-pattern in dagger, which [aspires to be simple](http://www.infoq.com/presentations/Dagger).

The concept of plugin-systems is better facilitated by natural use of Set bindings. Set bindings allow you to keep binding to the same coordinates. This overlays whatever was present with something the user prefers. Ex. route53 IIP credentials supplier would be the first, and if someone specified their own, it would be the second.

This pull request removes the meta around credentials and also corrects a problem in the build. Essentially the edge providers were not running the dagger compile phase, and therefore falling back to the more expensive reflective DI. A side effect of this was that dot files were not being generated.

With this pull request in, there's less code, less complexity and also the build will output dot files which will help us hunt down and kill the rest of our incidental complexity in wiring.

Ex. after running `./gradlew clean test install` you'll have some dot files to load in omnigraffle or otherwise favorite graph tool.
```
providers/denominator-clouddns/build/classes/test/denominator/clouddns/CloudDNSProviderTest.Module.dot
providers/denominator-dynect/build/classes/test/denominator/dynect/DynECTProviderTest.Module.dot
providers/denominator-route53/build/classes/main/denominator/route53/Route53Provider.Module.dot
providers/denominator-route53/build/classes/test/denominator/route53/Route53ProviderTest.Module.dot
providers/denominator-ultradns/build/classes/test/denominator/ultradns/UltraDNSProviderTest.Module.dot
```