Add some docstrings
Refactor a lot of things to allow for plugins

The PluggableInvoker was added. This invoker uses other invoker but will
also include the capability for plugins that change the way a function
is invoked while being optimized.