vm: Support legacy API as well

This adds support for programs that might currently do the previous
style such as vm.runInThisContext(code, filename, timeout, disp).

Also, this makes the *.runInContext less of a jerk, so that it'll test
the supplied context object before passing it to C++.  At that point,
since isContext(sandbox) will get run in both, runInContext and
runInNewContext are effectively the same function, so they are aliased.

The type-checking is mostly moved to JS now.  The main drawback of this
is that it adds another line to the stack traces, but it's not so bad.
After all, vm.runInContext actually IS calling script.runInContext, so
the stack traces are somewhat more accurate.
repl: Catch syntax errors better

Replace the growing list of 'isSyntaxError' whackamole conditions with a
smarter approach.  This creates a vm Script object *first*, which will
parse the code and raise a SyntaxError right away.

We still do need the test function, but only because strict mode syntax
errors are not recoverable, and should be raised right away.  Really, we
should probably *only* continue on "unexpected end of input" SyntaxErrors.

Also fixes a very difficult-to-test nit where the '...' indentation is
not properly cleared when you ^C out of a syntax error.

Closes #6093
repl: treat "Assignment to const" as syntax error

Adding a new `repl-harmony` test file here because adding the
`--use_strict --harmony` flags on the main repl test file was causing
lots of unrelated failures, due to global variable assignments and
things like that. This new test file is based off of the original
repl.js test file, but has a lot of the tests stripped out. A test case
for this commit is included though.

Fixes #6132.