Added an abstraction layer for managing plugins

ModAdapter is a class that decides whether a plugin is a script or a
binary library (dll, so, or dylib) and creates an instance of the
appropriate class. ModAdapter also creates a list of functions that the
user wants to persistently execute from the same module. For example, a
plugin may have a function for collision processing and a function for
writing stuff to a console. If the user (engine) wants to run them both,
it can tell the instance to register both functions and then
RunFunctions() execute them sequentially!