Refactor GadgetRepo inheritance and construction

The biggest issue this fixes is that GadgetRepo::getAllRepos()
did not cache the constructed GadgetRepo objects, meaning that
any instance caching done would be lost. The new GadgetRepoFactory
now handles now that.

Since the static functions of GadgetRepo were moved to GadgetRepoFactory,
the one non-abstract function was moved to CachedGadgetRepo so
GadgetRepo could turn into an interface.

Change-Id: Ib2e1155332f0de6605331843337a3a80cc6784bf
Merge "Refactor GadgetRepo inheritance and construction" into RL2