-Generic plugin support.
Each project has a plugin *instance* that gets project-specific build events. Each plugin has two static methods that get called for global events, and can allow the plugins to share static data.
-Toolchains now also have static functions for global events, and can share static data just like plugins.
-Added a toolBase class from which compilerBase and linkerBase inherit, which provides the SettingsOverrider functionality and the build events.
-Moved all build events into _utils.CheckRunBuildStep(), which does the following:
-- 1) Checks if the build event will have any potential effect at all and cuts out early if not
-- 2) Locks a mutex to prevent other build events from running while this one runs
-- 3) Changes working directory to the project's script path so that relative paths are reliable in the build event
-- 4) Prints a log message stating what kind of event is being run, and what function is being called to run it
-- 5) Executes the function with proper exception guarding
-- 6) Changes the working directory back to its previous location
-- 7) Unlocks the mutex and returns
- Made tracebacks more readable in python3 by ensuring filename was present