#88 Change for annotation driven code generation
Introducing a new annotation for code gen

SupportedRootClass annotation will drive the subject type of code
generation. In another words, if we want to create a Factory class for
Fubar type, then we need to annotate the Factory interface with
@SupportedRootClass(Fubar.class) so that at code generation time, we
can scan the classloader for the descendants of Fubar.class and set up
the factory for all the descendants.
#88 Printing deprecation warning for legacy code
#88 Migrating code gen classes to use annotations

At this point, the legacy code in the AbstractFactoryCodeGenerator
should no longer be used. We'll leave it there for a little while in
case anyone else is using it.
#88 Deprecating object instance based factory

The factory method relying on previously instantiated object implies
that, if we were to use these factory methods, we cannot defer the
instantiation of the subject object. This is one of the major problem
that we wish to address. We deprecate this old interface, and will
migrate to a less resource eager model.
#88 Migrated DependenciesFactory to annotation
Removing error prone method

Use simpleName method instead.
#88 DependenciesFactory caller to use new intf