Creating Plugin Architecture and Migrating Templates

The goal of the plugin system in this Pull Request is to-

1. Allow Plugins to define and set tags, rather than just supply templates.
2. Let Plugins extend the command line by adding new options.
3. Allow Plugins to modify or overwrite defaults or information set by other Plugins.