Change plugin loading logic to allow plugin overriding

Now, the plugin logic works like this:

1. Scan all specified plugin paths for any plugins
2. Group plugins by their name, and sort by descending version number
3. For each plugin name, go down the list of plugins until one is successfully loaded

Also handles things like plugins that are incompatible with current core version (it won't load these), and plugins without versions (it will give these lowest precedent, but will load them.)

Addresses #103 and watson bug 3678268