self-registering plugin framework (subclasses of Plugin just need to be in the right directory, that's it)