context: Move the majority of gjs_context_eval to jsapi-util

And use it in the importer as well.

This deduplicates a large part of the script evaluation code.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Make gjs_strip_unix_shebang public and clarify some variable names

line_number in this instance is really the starting line number.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Remove unused gjs_files_with_tests

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Fix context leak

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Fix program name leak

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Use g_file_new_for_commandline_arg in gjs_context_eval_file

g_file_get_contents uses open() directly, but we really want to create
a file using GVFS so that we can evaluate files which are actually
resource URIs.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Add a context stack API

The current context is now based on a stack model, so clients can
freely push and pop contexts. The current context is the top of
the stack.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Add GjsReflectedScript

GjsReflectedScript contains some useful information about a
script, including an array with all available function names,
array of all branches and an array of all executable lines.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Add GjsDebugHooks

This object serves as a central point for clients to connect
to SpiderMonkey's internal debugging functions without stepping on each other.

Through GjsDebugHooks, clients are able to connect to the general
execution hooks (such as entry and exit of new functions and source files),
enable single-step mode and recieve interrupts and add arbitrary breakpoints
on source files.

Each of these functions takes a callback and returns a guint.

Remove the debugging hook with the relevant _remove function.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Integrate GjsProfiler with GjsDebugHooks

GjsProfiler now takes a strong reference to GjsDebugHooks and
uses its function calls and execution hook in order to gather profiling
info instead of using SpiderMonkey's debugging API directly

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Added GjsCoverage object (and thus code coverage support)

This object effectively just takes a connection to the single step
handler and records how many times we hit each line.

To prevent clutter, files considered to be part of the coverage report
must be specified inclusively, anything not part of those paths will not
be included in the coverage report.

The coverage tool is integrated in to gjs-console, you can use it by
specifying -C or --coverage-path to add a file to generate coverage reports
for. If paths are specified, then --coverage-output is mandatory in order
to specify a directory to write coverage reports to. In order to handle
writing reports for URIs that GVfs might understand but lcov would not,
we need to copy the covered files into this directory.

Coverage reports are append-only by default. Just remove the report
if you need to zero the counters.

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Generate coverage reports for Gjs

Added the necessary Makefile bits to generate coverage reports
using gcov and also hook up gjs-unit to our own internal coverage
generator and generate coverage reports for our module scripts.

"make lcov" can be used to generate coverage reports.

https://bugzilla.gnome.org/show_bug.cgi?id=721246