DWARF reading support for RTS
Sample profiling support

This sets up the infrastructure for sample-based profiling. Namely, we
now output the debug information into the event log complete with
relocated IP ranges.

This patch also sets up everything needed for actually emitting samples.
We try to be very general here - samples *could* for example become
cost-centres if we want to support cost-centre based profiling at some
point down the line.
Heap allocation profiling

This is one of the cheapest possible ways to get profiling data: The
nursery grows block-wise, with each block getting requested separately
after the last block filled up. We simply fill an array with the sources
of these requests, and get a nice overview of allocation hot spots out
of it.
IP sample-based heap profiling

This casts heap profiling as a source of IP samples. This works because
the closure header pointers are code pointers at the saem time - so by
identifying them we get a good view of memory residency.
Support for tracing "tasks"

The idea is to trace execution time using the event-log and map it to
a DAG of tasks with dependencies.

This is pretty much just proof-of-concept. ToDos:
- Save task in TSOs instead of caps. Right now thread rescheduling would
  make everything look very bad indeed.
- The dependency relation needs to capture *when* the dependency applies.
- The "task" name clashes badly with the RTS-internal tasks. Find a
  better one.