Added initial framework for virtual machine

The files type.h and type.c define a variant type that stores different
types of data to be processed by the virtual machine, as well as type
constructors to safely access and modify the data contained in variants.

The header vm.h defines the virtual machine from which instances will be
used to process instructions. The opcodes for the virtual machine are
defined in the files opcode.h and opcode.c.
Added source from the previous commit to the bulid