Add option to register Custom AddonRepository implementations

With this you can create your own non disk based repository, e.g. a Repository backed by a ClassLoader.

The AddonRepository interface is still fairly tied to Disk via e.g 
```java
File getAddonDescriptor() {}
List<File> getAddonResources(AddonId addon);
File getRootDirectory();
```

These limitations can be worked around for the time being. A future revision of the interface might want to abstract that away.