Experimental Annotation processing for RoboGuice DefaultRoboModule optimization

Hi Michael,

as we talked about previously, this annotation processor tries to optimize the RoboGuice's DefaultRoboModule.

It will create a custom DefaultRoboModule so that every feature that is not used will not be loaded by RoboGuice. It can currently discard : 

* unneeded Android services if they are not injected. 
* injection of extras, resources, and a few more things will only get bound if used.

It's really experimental and still the package information is hard coded to fit my example.

I would like to get an early feedback to see if you like that feature or not, and want to comment the design of my implementation.

I need to : 
* add more tests
* adapt to application package name (I still don't know exactly how I will do it, maybe parsing the manifest)
* complete some features (by the way do you have an example of using @Named android_id ?)

On a Nexus 4, the startup time decreases from 840 ms to 670ms (average on 30 launches) with this optimization of a program that uses a lot of views and fragments injections, but no services at all, and I think it's the case of most apps.

The generated module can be declared in the manifest. I also changed the way modules are loaded : 

* if you declare in your manifest (or xml if it still works) a module that is a DefaultRoboModule (and generated modules are), then the default DefaultRoboModule is not loaded.
* you can declare only one class that extends DefaultRoboModule
* if you don't, the default DefaultRoboModule is loaded. 
* DefaultRoboModule now has the capacity to ignore features by using switches (non static-though, things will get compiled in but not used). 
* by default the default DefaultRoboModule uses every feature. All switches one.
* subclasses of DefaultRoboModule can be created by hand or generated by the annotation compiler depending on what your project uses. They just define which features are activated, which switches or on, or not.

That's a good prototype, I would appreciate a review on it from you @emmby,or @Macarse , when you can.

Here is an example of a generated custom module : 

```java
package xxx.yyy;

import android.app.Application;
import roboguice.inject.ContextScope;
import roboguice.inject.ResourceListener;
import roboguice.inject.ViewListener;

public class CustomRoboModule extends roboguice.config.DefaultRoboModule {

  public  CustomRoboModule(Application application, ContextScope contextScope, ViewListener viewListener, ResourceListener resourceListener) {
    super(application, contextScope, viewListener, resourceListener);
  }

  protected void configure() {
    hasFeatureWindowManagerService = false;
    hasFeatureTelephonyManagerService = false;
    hasFeatureSensorManagerService = false;
    hasFeatureLocationService = false;
    hasFeatureConnectivityManagerService = false;
    hasFeatureWifiManagerService = false;
    hasFeaturePowerManagerService = false;
    hasFeatureAudioManagerService = false;
    hasFeatureVibratorService = false;
    hasFeatureNotificationManagerService = false;
    hasFeatureInputMethodManagerService = false;
    hasFeatureActivityManagerService = false;
    hasFeatureAlarmManagerService = false;
    hasFeatureLayoutInflaterService = false;
    hasFeatureKeyguardManagerService = false;
    hasFeatureSearchManagerService = false;
    hasFeatureAccountManagerService = false;
    hasFeatureInjectFragment = true;
    hasFeatureInjectView = true;
    hasFeatureInjectResource = false;
    hasFeatureInjectExtra = false;
    hasFeatureInjectPreference = false;
    super.configure();
  }
}
```
Regards,
 S.