VM interface & factory

Adds polymorphic interface for VM objects. It will allow VM to be replaced by JitVM at runtime.
`StackTooSmall` inherits explicitly publicly from `VMException`, but as it is a struct, public inheritance is the default and thus not needed.