VM interface & factory

Adds polymorphic interface for VM objects. It will allow VM to be replaced by JitVM at runtime.
Please use `asserts` and recover (e.g. by returning an Interpreter in both cases).