Add GjsReflectedScript and GjsReflectedExecutableScript

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.

GjsReflectedExecutableScript is an implementation of the former
which can be updated as-needs-be at runtime (while new executable
lines are added).

https://bugzilla.gnome.org/show_bug.cgi?id=721246
Add GjsDebugHooks interface and GjsMultiplexedDebugHooks object

This interface (and object) serve 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 GjsInterruptRegister

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.