Added sketch for VM

DO NOT MERGE
This is just a sketch.
Please comment.
<insert_the_princess_bride meme> 
Hoist means something like "elevate", referring to the fact that `var` declarations are moved to the beginning of the scope defining block (i.e. script or function).

Strict mode doesn't disable hoisting. It just enforces that a variable has to have a declaration, even if it appears after:

```js
"use strict";
x = 1;
var x;
```
Did you intend to write that assignments to undeclared variables access the variable declared in the outer scope, and no such var exists, it will create one at the outer scope ?