Refactored codebase

- Added check to ensure plugin isn't loaded again if already loaded.
- Added configurable mappings to allow users to be able to define their
  own mappings.
- Added global configurations that user can override.
- Added an informative Header to the plugin to give basic information
  about the plugin.