General code cleanup, introduction of base plugin

This pull request addressed the following:

* Update of Nebula plugin versions
* General code cleanup
    * Removal of unused code
    * Broke out inner classes for better maintenance
    * Introduction data types for all task input/output properties to improve usability for end users
    * Introduction of base task type to reduce code duplication and allow for easier configuration
    * Addition tests
* Introduction of a base plugin so plugin users can create their own tasks and take full control
If you're supporting 1.12 (which we should be), we usually create branches for the versions we support. E.g. we'd have gradle-1.9 and gradle-1.12 and release from both to support a more broad base of users. In this case, there's so few users, this will be ok. Though make sure the version is prefixed with 1.12 if it's using 1.12.