Async virtual machine, should refactor and have a program object so that we can have one vm that is executing multiple programs