Machine Abstraction

Abstracted the Machine class to allow new machines to be injected into
the compiler. Simply implement a new machine to the Machine.h interface.
The x86 Machine can be used as a base idea. When moving to other
architectures like ARM you must wrap functionality like Registers (EAX,
EBX, ect.) under the hood. Outside of that the machine code written to
the execution buffer has no necessary standard.