[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
[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`.
- Use `assert.throws` more and better.
[vm] Many fixes to make the tests pass.

- Changed `Script.prototype.runInNewContext` to be a derived method in JS, instead of one created in C++.
- Awkard `binding.ContextifyContext` + `binding.associateContextifyContext` combination replaced with simple `binding.makeContext`.
- Exceptions executing or parsing the script now have their lines corrected by `DisplayExceptionLine` to make the stack trace point to the right place.
- `ContextifyScript` verifies that it is called as a constructor.
- `ContextifyScript` methods verify that they are called on `ContextifyScript` instances.
- `ContextifyScript.prototype.runInContext` verifies that the context passed in has been `makeContext`-ed.
- Message test outputs updated to include the new lines where JS is used instead of C++ to implement a feature.