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.
And also avoid the synchronized block that this code is in.