Evaluate all plugin files before instatiating plugin objects

The previous logic instantiated plugins as the files were read. This
caused multiple instances of plugins to be created when a plugin is
"reopened" in another file.

Additionally, loading-specific logic is moved from System to Loader.
Merge branch 'one-plugin-per-class'