Create primary plugin structure

Create the primary plugin structure that will run the application.

This needs to be able to store variables in a shared storage and it needs to be able to add plugins which interact with the main interface (however it also needs to be decoupled from the interface).

The main idea is that the core will be able to launch commands that are all generated through plugin input.

Core will also give access to different functionality that can be used by the plugins