testprograms: build heat/relaxation program
machinery for deny-ing writes again.

but not quite hooked up, we only detect the first access right now.
rewrite allow/deny in terms of the new 'iprotect'.

they're essentially the same function, don't duplicate the code.

also, add a test for changing these memory protections.
bfd: fix memory leak.

The library name is dynamically allocated, in C.
bfd: add reading-symbols-from-process benchmark.
bfd tests: make sure the inferior always properly closes.
bfd: be more verbose about failure issues.
bfd: better job at memory cleanup.

we have a free_lmap function that is designed to do proper
cleanup: might as well use it.
bfd: some minor fixes to C test programs.

... that apparently no longer work, even with this.  was hoping I
could use these to valgrind, we appear to have a leak or memory
corruption, somewhere...
testprograms/heat: add missing 'return' at end of fqn.
testprograms: properly cleanup/ignore new executables
working(?) access detection.

it works for 20 or 30 iterations, at least.  Then it gets some
crazy error reading the inferior's set of libraries.

This is probably due to a memory corruption bug, but we don't know
where yet.  The quickest solution is probably to just start
caching symbols, since they don't change and the memory corruption
is likely in the code that loads those, anyway.