Classes
=======
The kcov design is based on a number of classes:

FileParser
----------
Reads the binary to parse debugging information, i.e., file/line -> address
mappings, and reports these to listeners. For ELF binaries, this is done on
startup, Python and Bash report during runtime.

Collector
---------
Controls execution, setup breakpoints, catch signals etc, and report breakpoint
hits. 

Engine
------
Low-level control of execution (i.e., setup breakpoints, start/stop execution).

Reporter
--------
Reports breakpoint hits and can be queried for address -> file/line mappings.
Also reads back accumulated data from previous runs.

OutputHandler
-------------
Receives files from the parser and allows writers to register. Will call into
writers at regular intervals.

Writer
------
Queries the reporter to produce HTML and cobertura (currently) output with
coverage data.


Python/bash
===========
The above classes are mainly modelled for dwarf/ptrace-based applications.
When covering python/bash code, the FileParser and Engine interfaces are
implemented by the same class since coverage data is collected during runtime.

Merge parser
============
