[vm] Re-do in terms of ported Contextify code.

Ported from https://github.com/brianmcd/contextify but with many
changes to fit into the Node.js codebase.

This is similar to node_script.cc, which formerly backed vm.js, but it
actually works well (see #3042).

As of now, it does not support the context <-> sandbox conflation that
the current vm module supports; the tests are updated to reflect that.
It also does not support the timeout parameter. Further commits will
reintroduce these features.

New tests are included to demonstrate what was fixed versus the current
vm module.
[vm] Reintroduce context <-> sandbox equality.

Contextify distinguishes between the sandbox, which is what is passed
in to the vm module and is the global object for a given context, and
the context itself, which is a C++ object in which scripts can run.

This commit hides the context from the user-facing interface, just like
in the vm module in Node.js 0.10 and lower. Users of the vm module only
deal with the sandbox objects, which internally are translated to their
corresponding contexts.
[vm] Attempt to reintroduce timeout argument.

This causes assertion failures running the timeout tests for me:

Assertion failed: !(handle->flags & UV__HANDLE_CLOSING), file src\win\async.c, line 77
[vm] Add `Script#runInNewContext`.
[core, module, vm] Replace node_script everywhere.

It has been supplanted by contextify.
[vm] Rename and fix vm tests.

- We no longer have `vm.Script === vm`, so tests that did `vm.Script.runInNewContext` etc. were failing.
- We no longer translate `null` contexts to a new object; it should throw an error.
- vm tests should be prefixed with `vm`, not `script.
- Use `console.error` instead of `common.debug`.
[vm] Re-do the vm statics in C++.

Otherwise, they mess up stack traces.