Load extensions using a separate ExtensionClassLoader for each.

These changes will allow extensions to contain different versions of JAR files. Libraries in the DataCleaner lib directories will always get precedence.
It is scanning in the sense that this class loader never loads any classes itself. All it does is "scan" the collection of class loaders passed to it. If none of these has a definition, class loading (or resource resolving) will fail.