Refactored Command into base class, added CodeProvider

Base class does the same logic (grab all [Macro] methods) for each class that inherits from it. Adding a new provider is as easy as inheriting from that and putting [Macro] on the methods you want to expose.

CodeProvider has been created, it adds some code like commands, like variables, conditionals and loops.